转发 -- C 语言声明指针的时候 int *p 到底是什么意思?
C 语言声明指针的时候 int *p 到底是什么意思?
https://www.zhihu.com/question/32196190
Mayne解释很不错,谢谢分享,转载如下
what doesn't kill me makes me complete
10 人赞同了该回答
补充
的回答。不算汇编,应该是内存吧。
记得老师说过学好C的三大法宝就是:跟踪调试,看内存,反汇编。
关于指针的问题基本上都可以通过看内存来解决。因为从本质上来讲,指针就是内存地址
╮(╯▽╰)╭我个人觉得,题主要是问这种是问题,说明题主对指针的理解不够清楚。
int * p 你可以倒过来看成p * int。
意思就是 定义了一个 变量,名字叫p
然后 它是*(指针),并且是 int 类型。
有点饶了,举个实际的例子。
#include<stdio.h>
void main()
{
int x=12;
int* p = &x;
printf("%d\n",x);
printf("%d\n",&x);
printf("%d\n",p);
printf("%d\n",*p);
printf("%d\n",&p);
}
然后看看运行结果
x=12 没问题,&x对x取地址,&x的值1638204。
p的值也是1638204,发现什么没有。
&x是个内存地址。p=&x (指针=内存地址)
*p=x=12。
(1638204 16进制就是0018ff3c)
调试程序,观察具体值。
看内存地址,可以更好的帮助理解。
看着图来一遍。
首先定义了一个 int 4个字节长度的变量x 它的值是12 (0x0000000c)
在内存中x对应的存储地址就是 0018FF3C。
即 编号为0018FF3C这个内存里面存储的是x的值,12
然后又定义了一个 int 类型的指针 p 指向x
指针也变量也是需要存储空间的 p在内存中的地址是 0018FF38 ,它里面的内容是x的存储地址 0018FF3C。
即 编号为0018FF38这个内存里面存储的是x的地址编号,0018FF3C
这样就好理解了。
*p解指针。沿着线走下去。p住在0018ff38里面,它的内容是0018ff3c。然后去找0018ff3c,然后0018ff3c里面的的值是 0000000c(12)。*p=12.
回到题主的问题。
这条语句 int *p = &x
我是这样理解的。首先定义一个变量名字叫p,带个* 表示是指针类型,里面存地址.
然后是int类型。因为p里面存放的是另一个数x的首地址。int是4个字节。这样*p解指针的时候就会找到x首地址0018ff3c-0018ff3f 这4个字节里面的内容。
int* p 跟int *p根本就是一样的。编译器在编译的时候是不会管你的什么鬼空格的。 这是个人理解、代码风格的问题。题主不要纠结这些=。=
说的我自己都晕了,希望对题主理解有帮助:D