【发布时间】:2016-07-24 23:35:36
【问题描述】:
我正在查看"Pointers in C: when to use the ampersand and the asterisk" 的答案,对int *p2 = &i; 的示例感到困惑(来自 Dan Olson 的回答)
i 的地址不是一个 int,它是 0x02304 之类的东西,对吧?那么我们怎样才能把它放到p2 中呢?如果字节内存地址不是 int 类型,那么 int 类型的 C 指针如何保存内存地址?
谢谢!
附:对于对此感到困惑的任何人,我发现有帮助的另一个线程(尽管它没有为我回答这个问题)是"What exactly is a C pointer if not a memory address"Good lucky。
【问题讨论】:
-
p2不是int。它是一个指向int的指针。所有指针都存储地址。无论地址指向什么,地址的大小都不会改变。 -
如果 lhs 写成 int* p2 而不是 int *p2 会有帮助吗?
-
@kaylum:实际上,不同的指针类型可能有不同的大小,但这远远超出了这个问题的水平。
-
p2不是 int 类型,而是 int* 类型 -
这样想,& 符号给出了任何东西的地址,例如 0x02304。但是编译器需要知道要使用多少字节,从 0x02304 开始;这是需要“int”部分的地方。因此,32 位编译器在读取该地址的值时会自动读取 4 个字节。地址只是一个数字,指针是一个地址,但编译器有额外的数据类型信息。