c - 如何避免使用全局变量?

标签 c

我尝试运行这个程序:

void get_set(int size, int arr[])
{
    int i;
    printf("Enter number of values to the array : \n");
    scanf("%d", &size);
    printf("\n");
    for (i = 0; i < size; i++)
    {
        printf("Value at %dth place is : \n", i + 1);
        if (scanf("%d", &arr[i]) == EOF)
        {
            break;
        }
    }
}

void print_set(int size, int arr[])
{
    int i, flag = 0;
    if (flag == 0)
    {
        printf("\nOriginal array is : ");
        for (i = 0; i < size; i++)
        {
            printf("%d,", arr[i]);
        }
        printf("\n");
    }
    else
    {
        printf("\nArray after deleting duplicates : ");
        for (i = 0; i < size; i++)
        {
            printf("%d,", arr[i]);
        }
        printf("\n");
    }
    flag + 1;
}

void RemoveDuplicates(int size, int arr[])
{
    int i, j, k;
    for (i = 0; i < size; i++) 
    {
        for (j = 0; j < i; j++) 
        {
            if (arr[i] == arr[j]) 
            {
                size--;
                for (k = i; k < size; k++) 
                {
                    arr[k] = arr[k + 1];
                }
                i--;
            }
        }
    }
}

int main()
{
    int size = 0;
    int arr[64] = {0};
    get_set(size, arr);
    print_set(size, arr);
    RemoveDuplicates(size, arr);
    print_set(size, arr);
    return 0;
}

简而言之,程序获取一个包含我输入的值的数组,并将其传递给其他函数。 我无法让它将数组和大小传递给其他函数。我试图避免全局变量;我做错了什么?

最佳答案

main 中的 size 变量按值传递给 get_set,因此它仍然是 0 主要。您应该让 get_set 返回大小并将结果分配给 size 变量(或通过引用传递 size),以便您可以将其传递给print_setRemoveDuplicates

get_set 实际上并不需要 size 作为参数,除非您更改它的含义以指示数组的容量并添加错误检查以确保您不需要不要溢出它。

arr 变量通过引用传递,因为它是一个会衰减为指针的数组,因此 get_set 将修改 main 中的变量.

关于c - 如何避免使用全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53460711/

相关文章:

对 C 中的 scanf() 感到困惑?

c - 我的 CD 和历史记录功能出现问题

c++ - 我可以在 CUDA 代码的内核部分使用 C++ 头文件吗?

c++ - 从 C/C++ 向 LDAP 服务器进行身份验证

c - 堆栈返回整数值,而不是字符串/字符。我该如何解决?

C 中的循环依赖?我没看到

c - GTK3窗口透明

将 C 程序中的地址转换为源行

c - 我无法理解以下 c 代码的执行

c++ - 指令级并行探索