C语言指针 彻底讲明白

C语言指针 彻底讲明白,第1张

#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.

大家要自己实践一下哦

希望刚才我讲的可以帮到大家。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/564678.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-06
下一篇 2022-04-06

发表评论

登录后才能评论

评论列表(0条)

保存