问题描述
我今天完成了三个课程,我是一名学生,我倾向于过度认为我可以做的比我做得更多。问题是当我输入3个数字时,不应该有三个内存地址吗?我觉得我的程序缺少一个移动指针的组件。下面提供了代码。为什么在我们的职业生涯中会使用内存地址?
#include <stdio.h>
#include <stdlib.h>
void options()
{
puts("\t\t\tMain Menu");
puts("\t\ta. Enter New Integer Value");
puts("\t\tb. Print Pointer Address");
puts("\t\tc. Print Integer Address");
puts("\t\td. Print Integer Value");
puts("\t\te. 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 %p\n",(void *) iPtr);
break;
case'c':
//Print Integer Address
printf("Address of integer is %p\n",(void *) &i);
break;
case'd':
//Print Integer Value
printf("The integer value is %d\n",i);
break;
case'e':
break;
default:
printf("Invalid Option,try again\n");
break;
}//end Switch Statement
}//end while statement
return 0;
}
解决方法
变量 i
在 main
的整个执行过程中始终位于内存中的相同位置,因此无论您打印其地址多少次,您都会看到相同的值。这是指针在 C 中工作方式的一个重要特性:任何给定的变量在其整个 lifetime 中都保持相同的地址。如果这不是真的,那么指针将无法可靠地使用,因为即使指针保持不变,您也无法知道变量是否已从其下方移出。
当循环第二次迭代时,分配给 i
会用新值覆盖该位置的先前值。它不会为它分配一个单独的位置,如果这是你的想法。除了违反上述规则外,这也意味着任何重要的循环都会几乎立即耗尽您的内存。