我刚刚开始学习我在工程类(class)中所做的一个单元的编程,并且我遇到了一些建议。我只是想保证我实际上正确理解了在函数中使用指针作为参数的概念。如果我理解正确的话,您将传递一个指针到您希望通过调用的单独函数更改的变量的地址,即使它是调用函数范围内的局部变量。那有意义吗?我有一个我重写的教科书中的例子。唯一的事情是他们把它分成两个不完整的部分,我把它放在一起,填补空白并在主函数中添加最终的 printf 语句。我将其粘贴到这里:
#include <stdio.h>
#include <stdlib.h>
#define READ_OK 0
#define READ_ERROR 1
int read_num(int lo, int hi, int *num);
int main(int argc, char *argv[])
{
int lo = 0, hi = 0, *num, val;
printf("Please enter a lower bound and an upper bound for your range,respectively\nLower: ");
scanf("%d", &lo);
printf("Upper: ");
scanf("%d", &hi);
num = &val;
if(read_num(lo,hi, &val) != READ_OK)
{
printf("Read error, program abort\n");
exit(EXIT_FAILURE);
}
else
{
printf("You entered %d, press any key to continue: \n", val);
getchar();
}
return 0;
}
int read_num(int lo, int hi, int *num)
{
int next;
printf("Enter a number between %d and %d: ", lo, hi);
while(scanf("%d", &next)==1)
{
if (lo<=next && next<=hi)
{
*num = next;
return READ_OK;
}
printf("%d is not between %d and %d\nTry again: ", next, lo, hi);
}
return READ_ERROR;
}
那么我的理解正确吗? “val”在 read_num() 中被修改,通过以指针“*num”的形式传递它的地址,然后在其中写入“next”的值? PS:这个语法正确吗? PPS:这个过程具体叫什么?
非常感谢您的帮助:)
最佳答案
*num
在 main()
函数中不是必需的。当您在 read_num()
中传递 val
的地址时,因此 read_num()
中的任何更改也会影响其中的值main()
当您使用地址时。
在你的程序中,你基本上使用了两个不同的指针 - 一个在 main 内部,它是 num,另一个在 read_num()
内部,它也是 num,为了更好地理解,请参阅变量的范围C。由于 val
位于 main
内部,因此您不需要在此处使用指针,因为您可以更改 main 中的值,因为它是本地的。当您要在主程序外部或变量范围之外更改 val
的值时,您将需要指针。
关于c - 给菜鸟的C语言指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30415024/