这是在朋友圈里面看到有人调侃的一个C语言题目,这里拿出来分享给大家看看。
1
我们知道
int a = 120;
int* p = &a;
这样我们可以给指针p赋值。指针很多初学者学习的时候会觉得一脸懵逼,我们只要明白几个关键的东西,会让我们对指针理解更深入一些。
我们写代码,声明的各种类型的变量,其实是为了我们给内存定义不同的类型,int a;可以声明一个整型变量,就是找了一块内存给他起个别名为a,然后这个内存地址的类型就是 int,说白了,你只能存储int类型。
int* p;也是如此,找了一块内存,起个别名是p,然后这个地址只能存储int*的类型,int* 如果看得比较不顺眼,可以看成是 &int 。
但是这样的代码,你可能是没有见过的
#include <stdio.h>
int main()
{int a = 120;int* p = &*&*&*&*&*&*&*&*&*&*&*&*&a;printf("&a:%p p:%p &p:%p *p:%d\n",&a ,p ,&p ,*p);return 0;
}
这代码是可以正常输出的,输出如下:
然后我们再仔细看看,虽然写了很多 &* ,但是无非也不就是把 a 的地址赋值给了 p,仅此而已。
上面的代码和下面,其实是一样的
#include <stdio.h>
int main()
{int a = 120;int* p = &a;printf("&a:%p p:%p &p:%p *p:%d\n",&a ,p ,&p ,*p);return 0;
}
最后,如果觉得不错,大家顺手点个赞,转发就是对我最大的鼓励和支持!
长按识别二维码关注公众号