【问题标题】:How do I make my array available to other functions?如何使我的数组可用于其他功能?
【发布时间】:2019-01-11 19:36:11
【问题描述】:

我在 main() 函数中声明了一个数组,我需要在一个从 main() 调用的函数中访问它。如何使该数组可用于该函数?最好的方法是什么?我尝试使用 static 关键字,但这并没有改变任何东西。我应该在 main() 之外声明数组以及被调用的函数吗?

【问题讨论】:

  • 将其作为参数传递。

标签: c arrays function scope


【解决方案1】:

如何使数组对函数可用?

在 C 语言中,您可以通过将变量名称放在所调用函数的括号中来将数组等变量传递给函数。

最好的方法是什么?

假设您有以下代码:

void INeedNums(int nums) {
    // Do something with them nums.
}
int main() {
    int aBunchofNums[] = {1,2,3,4};
    INeedNums(aBunchofNums);
}

此代码会将整个 {1,2,3,4} 数组发送到函数以供其使用。

我应该在 main() 之外声明数组以及被调用的函数吗?

您可以在main() 函数之外声明它,使其成为外部变量。任何函数都可以访问外部变量。

上面的代码将数组发送到一个函数,函数可以在其中使用它。请注意该函数如何建立一个名为int nums 的新变量来处理它,这意味着它没有使用相同的变量,这意味着当您在第二个函数中编辑数组时,它不会更改驻留在其中的数组main() 您发送给它的。有几种方法可以改变这一点,即使用指针,如 P__J__ 的答案。

【讨论】:

    【解决方案2】:

    您可以将它作为参数传递给其他函数,也可以将其声明为全局的。

    示例 - 并通过练习了解变量的范围:

    int array[100]
    
    int add(size_t first, size_t second, size_t result )
    {
        array[result] = array[first] + array[second];
        return array[result];
    }
    
    int add1(int *array, size_t first, size_t second, size_t result )
    {
        array[result] = array[first] + array[second];
        return array[result];
    }
    
    
    void foo1(void)
    {
        int array[100];
    
        add1(array, 5, 7, 9);
        add(5, 7, 9);
    }
    

    【讨论】:

    • 你可以解释一下变量阴影是什么,如果这不是给读者的练习:)这可能是吹毛求疵,但size_t没有定义。包括例如stddef.h
    • @Inrin size_t 是标准类型,只对表索引。必须包含适当的头文件是合乎逻辑的。
    • @P__J__ - 可能需要包含适当的头文件。对于 C 语言的初学者来说,这很少是合乎逻辑的,尤其是那些问这种基本问题的人。而且,size_t 并不是唯一用于表索引的正确类型。
    • 我同意其他人的观点,即您应该在面向学习者的答案中明确包含适当的头文件;另外,也许您不应该向初学者建议使用全局变量,或者至少提到当存在更好的解决方案时使用全局变量是不好的做法。