#include
int main()
{
int a[5]={1,2,3,4,5};
int *ptr=(int*)(a+1);
printf("%d %d\n",*(a+4),*ptr+3);
return 0;
}
C语言指针对于我们的学习非常重要,而且在面试当中基本考的很多,下面我来讲一下C语言指针,让大家彻底明白,而且大家自己要去实践,完成不同种的测试,从而自己才可以彻底明白指针。
拿以上代码举例。
printf("%d",*(a+1)); 结果为2;printf("%d",*a+1); 结果为2; 这两个结果是一样的,所以大家不要害怕括号的问题,结果是相同的,大家一定要自己测试哦。
printf("%d",*a); 结果为 1; 当只用到*a的时候,这时*a 是a【】数组的第一个元素。
int *ptr=(int*)(a+1); :此时ptr是a【】数组中第二个元素,因为上面已经说了,*a指的是a【】数组的第一个元素,所以*(a+1)是数组a 的第二个元素。
printf("%d",*ptr); ptr的值为2.
printf("%d",*ptr+1); 结果为3;printf("%d",*(ptr+1)); 结果也为3. 加不加括号结果是一样的。
int *ptr=(int*)(&a+1);
printf("%d",*ptr); 此时输出 的结果为78456等一些随机数字。
这其中是有原因的,因为 int *ptr=(int*)(&a+1); 大家看到了这个&了吗,因为&是把数组a的整个地址取出来了,
a={1,2,3,4,5} ,a数组里面不是有5个数码,大家可以可以把&a+1理解为,a数组里面的5的后面的那个地址。
总之&a+1,此时输出的ptr就和数组a没有关系了。
然后printf("%d",*ptr-1); 这时结果为 5,因为*ptr-1,回到了数组a最后一个元素,
刚才说了大家可以可以把&a+1理解为,a数组里面的5的后面的那个地址。
printf("%d",*ptr-2) 同样此时结果是4.
大家要自己实践一下哦
希望刚才我讲的可以帮到大家。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)