数组如何在C中作用域?他们什么时候被摧毁? (注意,还要讨论它们是否可以在p_threads中传递)
答案 0 :(得分:1)
它们的范围与正常变量一样:
// in a function
int arrayA[300];
{
float arrayB[100];
// arrayA and arrayB available here
}
// arrayB out of scope, inaccessible.
// arrayA still available.
如果要将数组传递给函数,只要数组仍在调用站点的范围内,它就会有效。
答案 1 :(得分:1)
数组的范围与任何其他原语,结构或联合一样。在C中没有任何东西被破坏,尽管数组可能超出范围。
此外,就像其他类型一样,可以通过调用malloc()
来分配堆上的数组,以分配足够的空间来容纳所需数量的元素,并将返回的void *
视为指向第一要素。在您致电free()
之前,此类数组有效。
WRT Pthreads,规则同样适用于任何其他类型。如果将数组定义为自动(函数范围)变量,则在函数返回时它将超出范围;你不能安全地将指向这样一个数组的指针传递给另一个线程。但是如果你在堆上分配一个数组,那么你可以在任何你想要的地方(包括另一个线程)传递一个指向这个数组的指针(到数组内的任何东西)。当然,您仍然需要使用适当的同步机制确保对内容的线程安全访问。
答案 2 :(得分:1)
在C语言中,数组与任何其他命名实体之间的范围和生命周期规则绝对没有区别。即在范围和生命周期方面,数组不是特别的。他们在这方面的表现就像普通的int
变量一样。