你如何获得C中的指针地址?

问题描述

我今天完成了三个课程,我是一名学生,我倾向于过度认为我可以做的比我做得更多。问题是当我输入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;

}

解决方法

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

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