![](/img/trans.png)
[英]How can I Return an array from a function without using malloc?
[英]How can I declare an array with a variable, but without using malloc() in C?
因此,我必須創建一個2D數組,該數組將用於打印直方圖。 我知道數組將有52個元素寬,但是數組的高度將等於max + 1
,每次調用它所包含的函數時,數組的高度都會不同。 理想情況下,該行將完成以下功能:
char histPlot[max+1][52] = "";
但是,在編寫代碼時,我了解到C或至少是我的編譯器不允許在沒有常量值的情況下聲明數組。 我正在編寫此代碼的班級教授尚不清楚我們是否可以使用malloc()進行此分配。 假設我不能使用malloc()
,有什么方法可以創建數組histPlot[][]
使其具有正好為max + 1
的高度?
編輯:所以我已經接受了沒有使用malloc()
或某些類似函數就無法完成我要嘗試執行的操作的真正方法。 我確實設法找到了一個根本不涉及這些功能或2D陣列的解決方案,但是感謝那些回答!
從根本上說,在C99之前,如果它是可變長度數組,則需要動態分配。 這意味着malloc
或類似功能之一。
如果使用C99,則可以直接聲明它。
在C99中,允許您使用直到運行時才可用的值來聲明可變長度數組。 但是,您不能使用固定的初始化程序。 那是什么意思
char histPlot[max+1][52] = "";
您將必須編寫如下內容:
char histPlot[max+1][52];
for (int i=0; i<=max; i++) {
strcpy(histPlot[i], "");
}
注意,在for()
語句中聲明int的for()
是另一個C99擴展。 要成功編譯此代碼,您可能必須在命令行中添加-std=c99
之類的內容。
我還應該指出,堆上的可用空間比堆棧上的可用空間大得多。 如果需要聲明一個大數組(即,如果max
的值大於幾百),那么使用malloc()
在堆上創建一個數組將是有意義的。
如果它不太大,則可以在堆棧上的函數中聲明它。
#include <stdio.h>
void a(int b,int c) {
char d[b][c];
d[0][1] = 'a';
printf("%c\n",d[0][1]);
return;
}
int main() {
a(8,14);
return 1;
}
輸出:a
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.