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是什么意思?
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是什么意思?
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]
以此类推...
如果直接用数组名就表示是使用数组a[0]的地址。a 是int型的 那么+5就是a[6],当然没有a[6]了,这是一个上界。
你把1当成数组的a[0],一依次向后数5次,出界了对吧?p小于这个临界点 那循环的范围就是从a[0]到a[4]。