如何获得C中的指针地址



我今天完成了三个项目,我是一名学生,我往往认为我能做的比我做的更多。问题是,当我输入3个数字时,不应该有三个内存地址吗?我觉得我的程序缺少一个移动指针的组件。代码如下所示。为什么在我们的职业生涯中会使用记忆地址?

#include <stdio.h>
#include <stdlib.h>

void options()
{
puts("tttMain Menu");
puts("tta. Enter New Integer Value");
puts("ttb. Print Pointer Address");
puts("ttc. Print Integer Address");
puts("ttd. Print Integer Value");
puts("tte. Exit");
puts(" tPlease enter an option from the menu: "); 
}//end options

int main(void) {
//Intialize and Declare variables
char menuOption;
char valueStr [50];
int i; 
int *iPtr= NULL;
while(menuOption != 'e')
{
//Four Menu Options
options();
menuOption = getc(stdin);
getc(stdin);

switch(menuOption){
case 'a':
//Enter New Integer Value 
printf("Enter an Integer: ");
gets(valueStr);
i = atoi(valueStr);
break;
case 'b':
//Print Pointer Address
iPtr = &i;
printf("Address of Pointer is %pn", (void *) iPtr);
break;
case'c':
//Print Integer Address 
printf("Address of integer is %pn", (void *) &i);
break;
case'd':
//Print Integer Value 
printf("The integer value is %dn", i);
break;
case'e':
break;
default:
printf("Invalid Option, try againn");
break;
}//end Switch Statement
}//end while statement
return 0;
}

在执行main的整个过程中,变量i始终位于内存中的同一位置,因此无论打印多少次其地址,都会看到相同的值。这是指针在C中工作的一个重要特性:任何给定的变量在其整个生命周期中都保持相同的地址。如果这不是真的,那么指针就不可能可靠地使用,因为即使指针保持不变,你也无法知道变量是否已经从它下面移出

当循环第二次迭代时,分配给i会用新值覆盖该位置的上一个值。如果你是这么想的话,它不会为它分配一个单独的位置。除了违反上述规则外,这也意味着任何重要的循环都会立即耗尽内存。

最新更新