栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言中对普通变量、指针变量、二级指针变量在变量名、存储地址以及存储值的理解

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言中对普通变量、指针变量、二级指针变量在变量名、存储地址以及存储值的理解

在C中对变量名的理解是在变量定义时候,把某一区域的存储空间起一个别名(变量名),比如:double a; 如果我们是个好奇宝宝,我们可以通过&运算符来查看计算机具体把哪个存储空间取了别名a。

#include 
int main(void)
{
	double a;
	printf("%p",&a);
	return 0;
}

输出结果:000000F81959FD90。说明把这个存储空间取了doublel类型的别名a。

同理:double * b

#include 
int main(void)
{
	double *b;
	printf("%p",&b);
	return 0;
}

输出结果:00000019A7B1FD20。 说明把这个存储空间取了doublel类型指针的别名b。

重点来了。

下面来看:

#include 
int main(void)
{
double **c;
printf("%pn",c);
double *b;
printf("%pn",&b);
printf("%pn",b);
double a = 3.0;
printf("%pn",&a);
c=&b; // 将c指向存储b这一指针的地址,此时*c和b就是一个东西
printf("%pn",c);
*c=&a; // 等效于b=&a。此时更改c里存储的值(一个地址,既是*c也是b所指的地址),也就是所现在b指向了a所对应的地址
printf("%pn",b);
*b = 1.0;//等效与a=1.0
printf("%lf",a);

return 0;
}

输出结果:

45186D10D83DDBCD
000000A9D56FFC98
000000000000002F
000000A9D56FFC90
000000A9D56FFC98
000000A9D56FFC90
1.000000

这里的第一个结果和第三个结果其实都是不确定的,因为在一开始对二级指针和一级指针定义的时候没有给他们初始赋值,拿一级指针来说,double * b只是给这一空间(000000A9D56FFC98)取了一个double型指针的别名b,但是还没有给这一空间里存值(这里要存的值是地址,也即b指针应当指向哪个地址),所以第三个输出结果是不确定的。

总结:

给变量定义就是给某一存储空间取一个别名;

给定义好的变量赋值操作就是往这一空间里存值(对于普通变量就是数值字符之类;对应一级指针就是往这空间里存地址(给指针赋值的常用说法就是让指针指向想指的地址);对于二级指针同样是往这空间里存地址,但要注意,这里存的地址值所对应的存储空间里只能装一级指针的地址)

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1026703.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号