您当前的位置: 首页 > 

int *p = &*&*&*&*&*&*&*&a是什么鬼?

发布时间:2021-11-16 08:15:00 ,浏览量:0

这是在朋友圈里面看到有人调侃的一个C语言题目,这里拿出来分享给大家看看。

1

我们知道

int a = 120;
int* p = &a;

8060aec0896bffedf94f765f84def1ce.png

这样我们可以给指针p赋值。指针很多初学者学习的时候会觉得一脸懵逼,我们只要明白几个关键的东西,会让我们对指针理解更深入一些。

我们写代码,声明的各种类型的变量,其实是为了我们给内存定义不同的类型,int a;可以声明一个整型变量,就是找了一块内存给他起个别名为a,然后这个内存地址的类型就是 int,说白了,你只能存储int类型。

int* p;也是如此,找了一块内存,起个别名是p,然后这个地址只能存储int*的类型,int* 如果看得比较不顺眼,可以看成是 &int 。

但是这样的代码,你可能是没有见过的

#include 
int main()
{
    int a = 120;
    int* p = &*&*&*&*&*&*&*&*&*&*&*&*&a;
    printf("&a:%p p:%p &p:%p *p:%d\n",&a ,p ,&p ,*p);
    return 0;
}

这代码是可以正常输出的,输出如下:

5271d7668308404bff37d266693693fe.png

然后我们再仔细看看,虽然写了很多 &* ,但是无非也不就是把 a 的地址赋值给了 p,仅此而已。

上面的代码和下面,其实是一样的

#include 
int main()
{
    int a = 120;
    int* p = &a;
    printf("&a:%p p:%p &p:%p *p:%d\n",&a ,p ,&p ,*p);
    return 0;
}

最后,如果觉得不错,大家顺手点个赞,转发就是对我最大的鼓励和支持!

dc0e50a2ab13b044816e0144f0f48d63.png

长按识别二维码关注公众号

关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    106158博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0556s