理解*pp和&p的关联
Posted xujih
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了理解*pp和&p的关联相关的知识,希望对你有一定的参考价值。
最近老师布置了一个题目,要我们理解c语言中 * 和 & 的用法,其中运行了这么一个程序:
int v3,*p=&v3; printf(" =====理解*p、p和&p的关联:假设定义int v3,*p=&v3;====== "); printf("局部变量v3的内存地址为:0x%08x; 局部变量v3=0x%08x; ",&v3,v3); printf("*p=0x%08x; p=0x%08x; &p=0x%08x ",*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指针
这样的设计仁者见仁吧,哈哈。
以上是关于理解*pp和&p的关联的主要内容,如果未能解决你的问题,请参考以下文章