用C表示新秀

时间:2015-05-23 16:28:46

标签: c pointers

我刚刚开始学习我在工程课程中所做单元的编程,而且我遇到过指点。我只是想要一些保证,我实际上在使用指针作为函数中的参数时正确地理解了这个概念。如果我理解正确,你将一个指针传递给一个变量的地址,你想要被一个被调用的单独函数改变,即使它是一个在调用函数范围内的局部变量。那有意义吗?我在我的教科书中有一个例子,我重写了这个例子。唯一的问题是他们将它放在两个不完整的部分中,然后我将它放在一起,填入空白并在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:这个过程具体称为什么?

非常感谢帮助:)

1 个答案:

答案 0 :(得分:0)

main()功能中不需要val。当您在read_num()内传递read_num()的地址时,main()的所有更改也会影响read_num()内的值,因为您正在使用该地址。

在你的程序中,你基本上使用了两个不同的指针 - 一个在main里面,是num,另一个在val里面也是num,为了更多的理解,请参阅c中变量的范围。因为mainval内,所以你不需要在这里使用指针,因为你可以从main更改值,因为它是本地的。当您将从主要部分或变量范围外部更改{{1}}的值时,您将需要指针。