【发布时间】:2019-01-11 19:36:11
【问题描述】:
我在 main() 函数中声明了一个数组,我需要在一个从 main() 调用的函数中访问它。如何使该数组可用于该函数?最好的方法是什么?我尝试使用 static 关键字,但这并没有改变任何东西。我应该在 main() 之外声明数组以及被调用的函数吗?
【问题讨论】:
-
将其作为参数传递。
我在 main() 函数中声明了一个数组,我需要在一个从 main() 调用的函数中访问它。如何使该数组可用于该函数?最好的方法是什么?我尝试使用 static 关键字,但这并没有改变任何东西。我应该在 main() 之外声明数组以及被调用的函数吗?
【问题讨论】:
如何使数组对函数可用?
在 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__ 的答案。
【讨论】:
您可以将它作为参数传递给其他函数,也可以将其声明为全局的。
示例 - 并通过练习了解变量的范围:
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
size_t 并不是唯一用于表索引的正确类型。