关于C语言的 变量 地址 和 值
4个回答
展开全部
地址和指针是紧密相连的,首先值是放在内存中的一个区域,而内存中的区域都会有不同的编号,这些编号可以认为就是地址。
例如:int*
a是指针变量,int
b=3,
a=b,则是错误的,此时a是不等于3的,因为a是指针变量,你不能把b的值赋给它。应该是
b的地址
a=&b,就是正确的,此时a存放的就是b的值在内存中的地址
如果你输出printf(“%d”,a)与printf(“%d”,*a)
结果是不一样
前者输出的是b在内存中的地址,后者输出的是指针a
指向b的地址的值(即b的值3)
例如:int*
a是指针变量,int
b=3,
a=b,则是错误的,此时a是不等于3的,因为a是指针变量,你不能把b的值赋给它。应该是
b的地址
a=&b,就是正确的,此时a存放的就是b的值在内存中的地址
如果你输出printf(“%d”,a)与printf(“%d”,*a)
结果是不一样
前者输出的是b在内存中的地址,后者输出的是指针a
指向b的地址的值(即b的值3)
展开全部
关于这个问题我也很困惑。我最不解的是到底地址和存储空间哪个能访问到值,书上这么说的比如
int
a=12,*p=&a,从这里开始,看吧:*&a==a成立,并且&*p==p也成立。前者是指向a的地址的指针却跟a本身等同了,指向地址的指针跟值有什么关系呢?后者是指针的地址跟p的地址等同了。p的地址是指针p的地址,p表示p存储的地址是a的地址,两者地址i怎么能等同呢?
====================
根据书上的解释,貌似存储空间就是值。比如int
a=12,那么变量a的存储空间就是a,也就是12.这个可能要看看关于变量的定义了。
====================
更正一下这个答案。任何变量,都是一个代表,所代表的东西在CPU里,就是地址和值两个东西。当*(指针符号)加在变量前面的时候,就代表了对变量(此时变量代表一个地址)取值;当&(地址符号)加在变量前面的时候,就代表了对变量(此时变量代表一个值)取地址。
int
a=12,*p=&a,从这里开始,看吧:*&a==a成立,并且&*p==p也成立。前者是指向a的地址的指针却跟a本身等同了,指向地址的指针跟值有什么关系呢?后者是指针的地址跟p的地址等同了。p的地址是指针p的地址,p表示p存储的地址是a的地址,两者地址i怎么能等同呢?
====================
根据书上的解释,貌似存储空间就是值。比如int
a=12,那么变量a的存储空间就是a,也就是12.这个可能要看看关于变量的定义了。
====================
更正一下这个答案。任何变量,都是一个代表,所代表的东西在CPU里,就是地址和值两个东西。当*(指针符号)加在变量前面的时候,就代表了对变量(此时变量代表一个地址)取值;当&(地址符号)加在变量前面的时候,就代表了对变量(此时变量代表一个值)取地址。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把内存看成是一个一个的格子
往内存中放数据就是往格子里放
每个格子对应一个编号
这个编号就叫做地址
所以通过地址可以确定格子
也就是确定格子里的数据
而变量是有类型的
类型决定的是格子的个数
比如int
那么一般可以确定4个格子
所以使用变量名,就相当于访问这4个格子
仅供参考
个人理解
往内存中放数据就是往格子里放
每个格子对应一个编号
这个编号就叫做地址
所以通过地址可以确定格子
也就是确定格子里的数据
而变量是有类型的
类型决定的是格子的个数
比如int
那么一般可以确定4个格子
所以使用变量名,就相当于访问这4个格子
仅供参考
个人理解
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
要想很好的理解去看看,编译原理吧
人家在编译的时候,要维护一个符号表的
比如一个变量,int
a;
就有相应的
a这个符号对应的在内存中的偏移地址
当你在使用这个符号的时候,在相应的指令直接就插入它的偏移地址
人家在编译的时候,要维护一个符号表的
比如一个变量,int
a;
就有相应的
a这个符号对应的在内存中的偏移地址
当你在使用这个符号的时候,在相应的指令直接就插入它的偏移地址
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询