【发布时间】:2018-12-01 05:45:21
【问题描述】:
我很难理解this guide's code on pointers in C。我认为您需要一个&符号来引用指针的地址,但指南的代码设法在没有它的情况下获得它。我用我评论为“我的添加行”的一项更改修改了他们的代码。该行与其上方的行相同,但包含一个&符号。这些行的评估产生非常相似的值,但不是相同的值。我的逻辑哪里去了?
谢谢, 纳库尔
#include <stdio.h>
int main () {
int var = 20; /* actual variable declaration */
int *ip; /* pointer variable declaration */
ip = &var; /* store address of var in pointer variable*/
printf("Address of var variable: %x\n", &var );
/* address stored in pointer variable */
printf("Address stored in ip variable: %x\n", ip );
/* MY ADDED LINE: address stored in pointer variable */
printf("Address stored in ip variable: %x\n", &ip );
/* access the value using the pointer */
printf("Value of *ip variable: %d\n", *ip );
return 0;
【问题讨论】:
-
“这些行的评估产生非常相似的值,但不是相同的值。”可能是因为
var和ip在堆栈上彼此靠近。 -
行不一样。那里有一个&符号。你期待
var == &var吗?为什么不?那你为什么会期待ip == &ip? (提示:相同的答案。) -
感谢您的洞察力。我现在明白指针变量本身有一个地址。