![](/img/trans.png)
[英]In void function, declaring a global variable doesnot make it global [C]
[英]Declaring global variable (array) inside a function in C
我需要在 C 中聲明一個全局二維數組。
數組的大小由給定圖片的寬度和高度決定。
所以我首先要加載圖片,然后才創建數組。 但是如果我想讓一個變量(在這種情況下,我的數組)是全局的,我必須在文件的頂部聲明它,而不是在 function 內。
那么,當我在執行 main() function 后才知道數組的大小時,如何將數組聲明為全局數組?
編輯:(我也嘗試過其他解決方案,所以這個評論指的是所有這些)@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]); }
創建一個全局指針,然后將 malloc 空間放入其中。
char * buffer;
int main(void) {
buffer = malloc( /* Width * Height */ );
}
我沒有實際執行此代碼,但這應該可以幫助您入門。
int x_size = 100;
int y_size = 100;
int ** array;
array = malloc(sizeof(int *)*y_size);
for(int i = 0; i<y_size; i++)
array[i] = malloc(sizeof(int)*x_size);
larsmans 提出了一個很好的觀點。
那這個呢?
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(int i = 0; i<y_size; i++)
array[i] = &buffer[i*x_size];
看起來您可能需要一些基本的 C 教程。
int *buffer;
int **array;
int main()
{
int x_size=100;
int y_size=100;
int i;
/*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]);
}
使用static
變量(指針)並使用malloc
動態分配數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.