码迷,mamicode.com
首页 > 其他好文 > 详细

理解*p、p和&p的关联

时间:2019-10-09 22:33:12      阅读:324      评论:0      收藏:0      [点我收藏+]

标签:相等   模糊   图片   pre   初学者   赋值   局部变量   题目   info   

最近老师布置了一个题目,要我们理解c语言中 * 和 & 的用法,其中运行了这么一个程序:

    int v3,*p=&v3;
    printf("\n=====理解*p、p和&p的关联:假设定义int v3,*p=&v3;======\n");
    printf("局部变量v3的内存地址为:0x%08x;\t局部变量v3=0x%08x;\n",&v3,v3);
    printf("*p=0x%08x;\tp=0x%08x;\t&p=0x%08x\n\n",*p,p,&p); 

看上去很简单,就是把几个的值输出来看一看,运行结果如下

技术图片

但有个地方我就一直没搞懂,*p=&v3,那么不应该输出的时候这两者相等吗?

结果显示这两者根本不相等。

后来经我室友提醒,我才发现是我一开始的时候理解错了,p在被定义的时候被赋值不能理解为&v3的值赋值给*p,而应该拆开来理解

int v3,*p=&v3;

就应该等价于

int v3;
int *p;
p=&v3;

都是c语言“模糊不清”的变量声明惹的祸!

在golang中,在声明变量时将变量的类型放在变量的名称之后,例如

var a,b int  //go语言中变量声明的方式

这里就是声明了a,b两个int型变量,咋一看这种变化也没太大好处,再看看c中的其他定义

int *a,b; //这里a是int类型的指针,但b不是,b是int型
//它还可以这样写,对初学者来说更有迷惑性
int* a,b; //其实这样和上一句是一样的
int *c,*d; //此时c,d都是int指针

go语言

var a,b int //a,b是int类型
var c,d *int //c,d是int指针

这样的设计仁者见仁吧,哈哈。

理解*p、p和&p的关联

标签:相等   模糊   图片   pre   初学者   赋值   局部变量   题目   info   

原文地址:https://www.cnblogs.com/xujih/p/11644796.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!