转发 -- C 语言声明指针的时候 int *p 到底是什么意思?

C 语言声明指针的时候 int *p 到底是什么意思?

https://www.zhihu.com/question/32196190

Mayne解释很不错,谢谢分享,转载如下

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

猜你喜欢

转载自blog.csdn.net/liangxw1/article/details/84956465