Code Bye

讨教一个关于变量和指针的细节问题

本人猜可能是本人想复杂了,但是关于这方面概念一直有些不能彻底明白。
int a =1
int* p=&a
如上中,本人知道,变量a存了1这个值;而变量p是一个整形指针,存的值是变量a的地址
不知本人上面的表述能否正确。
那么假如没错的话,继续,通过*p可以访问到变量a的值。
此时有些疑惑,假如变量a存了1这个值,1这个值存在内存中一个固定的地址中,那么a和这个1怎么联系的?a在哪里?a怎么知道去哪里访问1这个值?
同样,p又怎么和&a关联?
另外,int* p表述中,int表示的是p这个指针是整形的,还是表示p是一个指向整形的指针?(本人猜应该是后者吧)
解决方案

15

变量实际上就是一块栈上的地址命个名,变量a上存的1就表示a的值是1,是在栈内部上的;
而你所谓的1是字面量,是在代码区内存里的,是把代码区里的1赋给了变量a,然后a就是1了,之后跟代码区的1没有关系了。
声明的指针本身就是一个变量,它也有值,存的要么是空值0,要么是一个内存地址指向其它变量,指针变量p本身的值是变量a的地址,所以*p就表示a的值,两者就是靠p存储的地址联系的。
int* p表示声明一个整形指针,它就是用来指向一个整形量变量的。
在32位系统里任何类型的指针都是4字节,存的是一个32位的地址值,指向某个对象起始字节的坡地,即任何指针所占内存字节大小是相同的4字节,但其类型代表了它们指向的对象的大小不同。

25

int a;
变量 a 有3个基本属性,一个叫a的(占用)的内存,用内存地址来表示 ,通常是 0x4000xxxxxx…之类的,
C,C++中 &a 可以获得 a的地址(实际上&a, 这个表达式是个指针表达式《值为指针)。
一个叫值,用a 表示。
也就是存在a占用的这块内存中的(数据),
这表示这块内存中,
存储器的每个位的状态例如
0–每位为0,
1 最低位为1 其他为0,
2,10,
3,11,
4,100,
5 ,101
这里 0,1 表示截至或导通 ,这个两个状态,哪个表示1,哪个表示0
具体由存储器的连接方式,工作方式,存储器的制造工艺等决定。
实际上,只要能够有两个不同稳定状态,就可以存储0.或1 ;
多个这种位单元,组成一个字节
通常为9个,8个表示数据,1个用于奇偶校验
X86每个Byte 为一个(地址)单元。
另外一个叫类型 ,a 的类型为 int
类型,表征了
1)数据的意义。int,float ,double 等
2)数据占用的字节数,int 类型,32Bits系统为4字节。
C,C++字节数是类型的一个很重要的特征,有了它,分配内存,就有了依据。
一个变量的名字,即表明了。
它占用的内存,又表明了它的值,还表明了它的类型特征。
内存地址,和值,都是一种抽象,隐藏了实现细节。
忽略了,内存存储数据的实现方式。
内存地址,一般用一个或几个整数表示,
除了 变量,C,C++还有字面常量(字面值,常量表达式)
字面常量,跟变量比,少了一个 内存占用的特征,也具有值,和类型两个特征。
C++  引用,是一种抽象类型,它的实现对程序员是透明的。
虽然实际上,往往就是隐隐的用指针实现的
但是 语义上,语法上都不同于指针
引用变量的实际地址,对程序员是透明的。& 只能取到,被它引用的对象的地址

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明讨教一个关于变量和指针的细节问题