c - 给菜鸟的C语言指针

标签 c pointers

我刚刚开始学习我在工程类(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:这个过程具体叫什么?

非常感谢您的帮助:)

最佳答案

*nummain() 函数中不是必需的。当您在 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/

相关文章:

c - 如何进行有用的检查 2D 坐标是否在圆内并写入它们

c - 如何在程序中grep一个字符串?

c - 如何在指针内部分配内存?

c - 我有两个关于c语言的问题

c++ - 是否可以删除取消引用的指针

c++ - 将整数转换为指针总是定义良好吗?

c# - OUT 事务的 PING 流量控制

c - 在方法中传递字符数组作为参数,C 语言

c - C 中是否有替代 strtoull() 函数的方法?

c - 索引到数组中以读取数据(C ......我认为这是一个非常基本的问题)