C语言中,p=&a 那么*p与a的区别是什么?
例如a=1,它的地址p=1000,那么在内存中p,&a,*p,a,1,1000这六个不同的量是他们之间的关系是怎么的我觉得虽然*p=a,但是在内存中他们是不一样的我想知道...
例如a=1,它的地址p=1000,那么在内存中
p, &a ,*p ,a, 1, 1000这六个不同的量是他们之间的关系是怎么的
我觉得虽然*p=a,但是在内存中他们是不一样的
我想知道他们之间是怎么分配调用的,最好有图或者推荐本书或者帖子我去看
还有就是 *p这个东西叫什么名字,貌似它不叫指针,也不叫指针变量
是“指针变量所指向的变量”?那么他的学名是什么?
BTW,感谢2L,love436053的关注,你说的很好,但是毫无意义,谢谢
234L说的都太太太太浅了,我要的是C语言教材上没有的东西 展开
p, &a ,*p ,a, 1, 1000这六个不同的量是他们之间的关系是怎么的
我觉得虽然*p=a,但是在内存中他们是不一样的
我想知道他们之间是怎么分配调用的,最好有图或者推荐本书或者帖子我去看
还有就是 *p这个东西叫什么名字,貌似它不叫指针,也不叫指针变量
是“指针变量所指向的变量”?那么他的学名是什么?
BTW,感谢2L,love436053的关注,你说的很好,但是毫无意义,谢谢
234L说的都太太太太浅了,我要的是C语言教材上没有的东西 展开
10个回答
展开全部
a和p是变量,&a和*p是表达式,1和0x1000是常量
a和*p表示的都是整形左值,p和&a表示的都是指针型左值,1和0x1000表示整形和指针型右值。(左右值的概念不清的话,google一下)
在内存中,a和p有存储空间空间,a存放着1,p存放着0x1000,*p和&a没有空间,他们的运算结果是在寄存器中存放的,1和0x1000也有空间,在程序的常量段存放。
*p按照Stanley Lippman的著作《C++ Primer》中的描述,p是指针变量,*是解引用操作符,*p是一个表达式,含义是“对指针变量p进行解引用操作”,这与表达式&a的含义“取整形变量a的地址”是正好是相反的操作。
a和*p表示的都是整形左值,p和&a表示的都是指针型左值,1和0x1000表示整形和指针型右值。(左右值的概念不清的话,google一下)
在内存中,a和p有存储空间空间,a存放着1,p存放着0x1000,*p和&a没有空间,他们的运算结果是在寄存器中存放的,1和0x1000也有空间,在程序的常量段存放。
*p按照Stanley Lippman的著作《C++ Primer》中的描述,p是指针变量,*是解引用操作符,*p是一个表达式,含义是“对指针变量p进行解引用操作”,这与表达式&a的含义“取整形变量a的地址”是正好是相反的操作。
展开全部
首先 a和p都是变量 1000是常量,这里只有a和p分配了内存,但是1000和1没有
p 是指p的值,也就是1000
&a 是指a的内存地址
*P 是指p的内存地址
a 是指a的值也就是1
1 是a的值,放在分配给a的地址里
1000 是p的值,放在分配给p的地址里
形象点说 ,a和p是房子
1和1000是住户,1 住在a里 1000住在p里
p 是指p的住户
&a 是指a的门牌
*p 是指p的门牌
a 是指a的住户
1和1000 是住户
书的话,谭浩强的 c语言程序设计第3版 里面有详细的说明帖子就不晓得咧·······
p 是指p的值,也就是1000
&a 是指a的内存地址
*P 是指p的内存地址
a 是指a的值也就是1
1 是a的值,放在分配给a的地址里
1000 是p的值,放在分配给p的地址里
形象点说 ,a和p是房子
1和1000是住户,1 住在a里 1000住在p里
p 是指p的住户
&a 是指a的门牌
*p 是指p的门牌
a 是指a的住户
1和1000 是住户
书的话,谭浩强的 c语言程序设计第3版 里面有详细的说明帖子就不晓得咧·······
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
&a取址 *p取值这没有什么可说的。
int *p; int a;
a的地址1000h,即&a == 1000h. p是指针,它本身也有存放它的地址,设1200h,
即&p == 1200h(Win32下,指针本身长度32位即4字节,可通过sizeof(p)得到). 这样就是用到两块内存了。
p = &a; 即p == 1000h. 这是一个地址值,本质是值,即可以加减等操作的。但是加减后的p, *p可能就无法访问了,因为它已经不指向a了,比如p == 1004h了,如果这是在某一函数里操作的,而1004h地址并不本程序的地址空间里,取*p时那就非法访问,要崩溃的;但如果1004h地址正好是这函数里另外一个int b;变量的地址,那*p的值就是b了。
*p表示取p指向地址的值,也就是1000h上的值; a = 1; 说明1000h上的值为1,所以*p == 1;a, 它本身只是一个符号而已,这个符号代表了地址1000h起的int型长(4字节)的一个内存块, a=1,就是内存块放一个值1, 如果有汇编的思想,能更形象点:[1000h] = 1,根本不需要a,b,c...之类的字符来表示,直接对内存地址进行存取。
int *p; int a;
a的地址1000h,即&a == 1000h. p是指针,它本身也有存放它的地址,设1200h,
即&p == 1200h(Win32下,指针本身长度32位即4字节,可通过sizeof(p)得到). 这样就是用到两块内存了。
p = &a; 即p == 1000h. 这是一个地址值,本质是值,即可以加减等操作的。但是加减后的p, *p可能就无法访问了,因为它已经不指向a了,比如p == 1004h了,如果这是在某一函数里操作的,而1004h地址并不本程序的地址空间里,取*p时那就非法访问,要崩溃的;但如果1004h地址正好是这函数里另外一个int b;变量的地址,那*p的值就是b了。
*p表示取p指向地址的值,也就是1000h上的值; a = 1; 说明1000h上的值为1,所以*p == 1;a, 它本身只是一个符号而已,这个符号代表了地址1000h起的int型长(4字节)的一个内存块, a=1,就是内存块放一个值1, 如果有汇编的思想,能更形象点:[1000h] = 1,根本不需要a,b,c...之类的字符来表示,直接对内存地址进行存取。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先我们明确a为一个变量 假设定义是 int a;
再明确p是一个指针,假设定义为 int* p;
当我们定义了一个a是系统会分派一个内存给你用来存放他的数值,如 执行了a=10;后 这个内存就存放了一个10的数字,当我们要用到它表示的10时,直接用a替代就可以了。
现在我们再用 p=&a "&"叫取地址符,他是一个运算符。 "&a"就表示指向a有就是上面的那个存着10的内存的地址。如果我们用到a的时候,很明显,我们不能直接用p了,因为他是一个地址而不是我们需要的10这个数,那怎么办呢?我们这里就可用"*"这个符号,他表示取这个指针所指内存上的数据,即 *p就表示a了用法什么的都一样。
再明确p是一个指针,假设定义为 int* p;
当我们定义了一个a是系统会分派一个内存给你用来存放他的数值,如 执行了a=10;后 这个内存就存放了一个10的数字,当我们要用到它表示的10时,直接用a替代就可以了。
现在我们再用 p=&a "&"叫取地址符,他是一个运算符。 "&a"就表示指向a有就是上面的那个存着10的内存的地址。如果我们用到a的时候,很明显,我们不能直接用p了,因为他是一个地址而不是我们需要的10这个数,那怎么办呢?我们这里就可用"*"这个符号,他表示取这个指针所指内存上的数据,即 *p就表示a了用法什么的都一样。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
-------------------------------------
1. int a = 1;
2. int *p; -> 他的地址是1000
3. p = &a;
-------------------------------------
1.在内存 某个 地址 放入一个int型的数字[1],这个 地址 符号名为 a
2.声明一个指针,这个指针 在内存位置1000的地方 类型是指针,符号名为 p
3. [*p] 我们声明时 就是 *p 这个形态 所以就叫他指针.
那么:
a 是内存某个地址的 符号,语法上我们用 &a 表示这个符号的真正内存地质。
*p 因为是类型是指针,我们不能赋予它值,只能给他一个要指向的地址,共享和修改那个地址里的内容(先不考虑const语句),。指针p里放着 a的地址,当电脑读到 p 时,直接去找 里面的地址去了。
p 指向地址,*p表示那各地址的内容。*p 英语里就叫它 point p 即 指针p
过程:
p = &a : p 复制 a的地址到自己的位置。
*p = 2 : 电脑判断 p的类型,是指针,就跳到 p 里的地址位置,在判断类型,不是指针,就把当前位置里的 值 改为 2,如果还是指针,就重复上面 直到遇到不是指针类型的地址。
至于名称,就叫指针,变量是 总称,变量 a, 变量 b, 给他们赋予范围和类型 ,int型变量a,指针型变量p;
1. int a = 1;
2. int *p; -> 他的地址是1000
3. p = &a;
-------------------------------------
1.在内存 某个 地址 放入一个int型的数字[1],这个 地址 符号名为 a
2.声明一个指针,这个指针 在内存位置1000的地方 类型是指针,符号名为 p
3. [*p] 我们声明时 就是 *p 这个形态 所以就叫他指针.
那么:
a 是内存某个地址的 符号,语法上我们用 &a 表示这个符号的真正内存地质。
*p 因为是类型是指针,我们不能赋予它值,只能给他一个要指向的地址,共享和修改那个地址里的内容(先不考虑const语句),。指针p里放着 a的地址,当电脑读到 p 时,直接去找 里面的地址去了。
p 指向地址,*p表示那各地址的内容。*p 英语里就叫它 point p 即 指针p
过程:
p = &a : p 复制 a的地址到自己的位置。
*p = 2 : 电脑判断 p的类型,是指针,就跳到 p 里的地址位置,在判断类型,不是指针,就把当前位置里的 值 改为 2,如果还是指针,就重复上面 直到遇到不是指针类型的地址。
至于名称,就叫指针,变量是 总称,变量 a, 变量 b, 给他们赋予范围和类型 ,int型变量a,指针型变量p;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询