我是一名刚开始用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);
}
答案 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
}