我刚刚开始学习我在工程课程中所做单元的编程,而且我遇到过指点。我只是想要一些保证,我实际上在使用指针作为函数中的参数时正确地理解了这个概念。如果我理解正确,你将一个指针传递给一个变量的地址,你想要被一个被调用的单独函数改变,即使它是一个在调用函数范围内的局部变量。那有意义吗?我在我的教科书中有一个例子,我重写了这个例子。唯一的问题是他们将它放在两个不完整的部分中,然后我将它放在一起,填入空白并在main函数中添加最终的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;
}
那么我的理解是否正确?通过以指针“* num”的形式传递它的地址,在read_num()中修改“val”,然后写入“next”的值? PS:这个语法是否正确? PPS:这个过程具体称为什么?
非常感谢帮助:)
答案 0 :(得分:0)
main()
功能中不需要val
。当您在read_num()
内传递read_num()
的地址时,main()
的所有更改也会影响read_num()
内的值,因为您正在使用该地址。
在你的程序中,你基本上使用了两个不同的指针 - 一个在main里面,是num,另一个在val
里面也是num,为了更多的理解,请参阅c中变量的范围。因为main
在val
内,所以你不需要在这里使用指针,因为你可以从main更改值,因为它是本地的。当您将从主要部分或变量范围外部更改{{1}}的值时,您将需要指针。