李奉典 2023-02-01 00:13 采纳率: 96.3%
浏览 44
已结题

关于#c语言#的知识点:指针 数组相减 的疑惑

#include <stdio.h>
int main(void)
{
char ac [] = {0,1,2,3,4,5,6,7,8,9, };
char * p= &ac[0];
char *p1=&ac [5];
/*问题如下
1.我知道char *p=ac等价于char *p=&ac【0】;
但是
 char *p=ac等价于char *p=ac【0】吗?这两句话区别是&号。
  char *p=ac【0】char *p=&ac【0】这两句的意思一样吗?
*/

printf("p =%p\n", p);
printf ("p+1=sp\n" ,p+1);
printf("p1-p=%d\n",p1-p);
/*2.指针P等于数组里的0,指针p1等于4,
p1-p为什么不是4?
*/

int ai[]= {0,1,2,3,4,5,6,7,8,9,};
int *q = ai;
int *q1 = &ai[6];  //[6]=5?
printf("'q=%p\n", q);
printf ("q1=%p\n",q1);
printf("q1-q=%d\n”,q1-q);
return 0;
}


3 &ac【5】是第五个数字,也就是数组里的4。为什么课程里说&ac【0】至&ac【5】之间差了五?

4.(此问题已经解决)
我认为ac【0】代表数组中的0,ac【1】也代表数组里的0。第0个数和第一个数,这该怎么理解?我突然想不通了,这该怎么理解?
答:
向丹塞妍
int a[5];中的那个5表示这个数组最多可以包含五个元素,在引用的时候是a[0]~a4,这5个元素,至于a[5],对于这个定义是的使用是非法的,因为他使用了超出数组申请空间以外的空间,就好比使用了不属于自己的东西(使用别人的是违法的)。若你使用a[5]的话,不一定会出现什么效果,可能在你看来会是正常的效果,但实际上是不正常的行为。

img

img

内存示意图上该怎么理解呢?万分感谢解惑
5.csdn提问违禁词为什么有这个..

img

  • 写回答

3条回答 默认 最新

  • P2441M 2023-02-01 09:32
    关注
    1. char *p=ac和char *p=ac[0]都不用说是否等价,因为char p=ac[0]这个语句本身就是错的,ac[0]是char,但是p是char,不能相互赋值。
    2. 首先,你仔细数数,p1对应的是5。但是严格地说,p1-p是指针相减,与它们对应的值无关,指针相减获取的是两个指针之间间隔的元素个数(不是字节数),所以p1-p得5,因为它们间隔5个位置。
    3. 和上面一样,ac[5]是第6个数字,是5。
    4. 数组里,0是第一个数,1是第二个数,以此类推。
    5. 啊这……这也违禁……我也不知道啊😂
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月9日
  • 已采纳回答 2月1日
  • 修改了问题 2月1日
  • 修改了问题 2月1日
  • 展开全部

悬赏问题

  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥100 已有python代码,要求做成可执行程序,程序设计内容不多
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助
  • ¥15 STM32控制MAX7219问题求解答