【发布时间】:2011-10-11 03:46:46
【问题描述】:
我需要在 C 中声明一个全局二维数组。
数组的大小由给定图片的宽高决定。
所以我首先要加载图片,然后才创建数组。但是如果我想让一个变量(在这种情况下,我的数组)是全局的,我必须在文件顶部声明它,而不是在函数内部。
那么,当我在 main() 函数执行后才知道数组的大小时,如何将数组声明为全局数组?
编辑: (我也尝试过其他解决方案,所以这个 cmets 指的是所有这些)@Mimisbrunnr 首先,感谢您的快速回复!
我已经尝试过了,但我看不到让它起作用。我可能错过了一些愚蠢的东西,但是“数组”如何成为全球性的?它在 test() 上说“数组”未声明
int *buffer;
int main() {
int i;
int x_size=100;
int y_size=100;
int * buffer = malloc(sizeof(int)*x_size*y_size);
int ** array = malloc(sizeof(int*)*y_size);
for(i = 0; i<y_size; i++) {
array[i]=&buffer[i*x_size];
}
array[0][1] = 5;
test();
return 0;
}
void test(){
printf("%d",array[0][1]);
}
【问题讨论】:
-
你真的需要一个全局变量(指针)吗?你不能把它转过来吗?传递它会使函数原型“复杂化”,但会使管理变得更容易,尤其是在处理多线程应用程序时。
-
@pmg: OTOH,函数原型的“复杂化”明确了函数的工作原理。
-
是的@ninja。我有一个很好的证据证明全局变量不好,但是这个评论框太小了:)
-
我可以通过它......但正如你所说,它确实会使我的代码复杂化。而且由于我现在只是为了学习 C,所以我想知道如何解决这个问题的所有选项,所以以后当我在现实生活中的程序中遇到它时,我就能做到以最好的方式。
标签: c global-variables dynamic-allocation