永发信息网

C语言中关于指针的一个疑问

答案:4  悬赏:0  手机版
解决时间 2021-08-16 14:15
  • 提问者网友:捧腹剧
  • 2021-08-16 03:52

 

main()
{
    int *p,i;
    int a[5]={1,2,3,4,5};
    p=a;

    for(;p<a+5;p++)
    {
        printf("%d\t",*p);

    }
    getch();
}

 

上面的例子是用指针打印出数组中的所有元素

 

请问循环语句中的a+5是什么意思?

最佳答案
  • 五星知识达人网友:洒脱疯子
  • 2021-08-16 04:09

a + 5等于 a指针(数组名就是数组首地址的指针)向后偏移5 * sizeof(数组的元素类型) 的内存地址的指针


可以理解为 a[5]这个元素 但是实际上没有这个元素 可以理解为


for (;p < &a[5];p++) 但是注意这句是不合法的 因为a[5]不存在


但是指针操作无所谓,不会出现越界问题


无非是指向了后面的内存区


比如用int循环


你会写 for (int i = 0;i < n;i++) 这里就一样的 你要循环5次 你就写i<5 而不是 <4


每次p++,p指针就会偏移一个sizeof(数组的元素的类型)


*p = a[0]


*(p + 1) = a[1]


以此类推...

全部回答
  • 1楼网友:英雄的欲望
  • 2021-08-16 07:49

如果直接用数组名就表示是使用数组a[0]的地址。a 是int型的 那么+5就是a[6],当然没有a[6]了,这是一个上界。

  • 2楼网友:醉吻情书
  • 2021-08-16 06:18
循环条件,当p<a+5时循环继续执行,当p=a+5时, 结束循环。
  • 3楼网友:duile
  • 2021-08-16 04:56

你把1当成数组的a[0],一依次向后数5次,出界了对吧?p小于这个临界点 那循环的范围就是从a[0]到a[4]。

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯