通过传递内存地址使用指针扫描值

时间:2017-11-06 16:08:04

标签: c pointers

我是一名刚开始用C学习编程的学生。 我现在正在学习指针,我正在尝试使用指针扫描函数中的值。但是我一直在收到错误。我不知道为什么。谢谢你的答案。

void inputValue(int *numptr);
int main()
{
    int input;
    inputValue(&input);
    printf("%d\n", input);
    return 0;
}
void inputValue(int *inputptr)
{
    printf("Enter the value");
    scanf_s("%d", *inputptr);
}

1 个答案:

答案 0 :(得分:1)


我有你的解决方案,你的功能是错的。 函数scanf()需要变量的地址而不是变量的值。

您的代码:

void inputValue(int *numptr);
int main()
{
    int input;
    inputValue(&input);
    printf("%d\n", input);
    return 0;
}
void inputValue(int *inputptr)
{
    printf("Enter the value");
    scanf_s("%d", *inputptr); // this is the problem
}

您必须传入变量的scanf()地址。

所以,你的功能应该是:

void inputValue(int * inputPtr)
{
    printf("ENTER:");
    scanf("%d", inputPtr);
}

如果您有整数变量,并且想要读取它:

int n;
scanf("%d", &n); //you have to pass address of n

但是如果你有变量指针:

int n;
int * ptr = &n;
scanf("%d", ptr); //address of n -> it is pointing to n

但是如果你写* ptr,它意味着变量的值指向:

int n;
int * ptr = &n;
scanf("%d", *ptr); //value of n - wrong

它没有传递变量的地址,而是它的值。 所以这是一样的:

int n;
scanf("%d", n); //value of n - wrong

简单的解释指示:

int n;
int * ptr = &n;

&n -> address of n
n -> value of n
ptr -> address of n 
*ptr -> value of n
&ptr -> address of pointer

当我们有使用指针的函数时:

void setval(int*, int);

void main(void)
{
     int n=54;
     setval(&n, 5); // passing address of n
     // now n=5
}

void setval(int * mem, int val)
{
     * mem = val; // it sets value at address mem to val
     // so it sets value of n to 5
     // if we passed only n not &n
     // it would mean address of value in n - if n would be 5 it's like we 
     // passed address in memory at 0x5
}