c語言 我想定義行數為n的陣列,為什麼還是告訴我不確定數

2021-03-26 17:48:13 字數 6334 閱讀 3345

1樓:哈哈呵呵你好

你這麼寫的話,那個n還是一個變數,c語言首先需要編譯才能執行,而編譯的時候編譯器就認為這個n是不確定的,所以他不知道要給你分配多大的儲存空間,我建議你可以定義一個指標來做,下面是一個例子。

假設陣列存的是int型

那麼 你先申請10個元素

int* a = (int*)malloc(sizeof(int)*10);

如果又來了個元素,那麼你就可以

a=(int *)realloc(a,11*sizeof(int));

求元素個數int i,n=1;

for(i = 0;(a+i)!=null;i++)n=i+1;//n就是元素個數

請問在c裡面,我要定義一個陣列,但是陣列的大小不確定

2樓:16減7等於

賦值:*(a+i) = 0; /* i 是陣列下標 */

或者a[i] = 0; /* 也可以,但我個人不推薦。*/

3樓:匿名使用者

和int a[10]用法一樣。

好好學習陣列和指標的關係,重定向和索引的關係。

4樓:

在c語言中,只有在堆上才能申請動態陣列。通過malloc可以申請使用者自由輸入長度的陣列,通過realloc可以將已有的記憶體區域重新分配(擴充或縮減)。

c語言如何輸入一個行數不確定的n*2的陣列?結束條件是最後輸入的是0 0。 例如 9 3 9

5樓:匿名使用者

#include

int main()

return 0;}

c語言中如何自定義陣列長度

6樓:文化廚子

動態分配的陣列可以自

定義陣列的長度,示例如下:

#include

#include

#include

int main()

memset(pstart, 0x00, sizeof(int) * size);

int inx;

for (inx=0; inx!=size; ++inx) pstart[inx] = inx;

for (inx=0; inx!=size; ++inx) printf("%d\t", pstart[inx]);

printf("\n");

return 0;}

7樓:匿名使用者

陣列不能bai在方括號中用變數來表示du

元素的個數, 但是可以zhi是符號dao常數或常量表示式。例如:專

#define fd 5

main()

是合法的。屬

但是下述說明方式是錯誤的。

main()

但是,陣列可以超界使用。

8樓:幻の上帝

c99標準支援不定長陣列(代價是不能用goto語句)。在輸入語句後宣告就可以了。

不過現在的編

9樓:匿名使用者

int n;

scanf("%d",&n);

int *pint = (int *)malloc( sizeof(int) *n);

10樓:

樓上有些挺深奧的

其實有兩種方法:

第一種:

用常量表示式

#define n 5//任定義一個數專

main()

第二種:屬

#include

main()

11樓:匿名使用者

採用動態bai分配即可實現,例如:du

#include

using namespace std;

void main()

12樓:匿名使用者

int *a;

int n;

scanf("%d",&n);

a=(int *)malloc(sizeof(int)*n);

13樓:匿名使用者

int *p=null,n;

printf("please input the num of elements:\n");

scanf("%d",&n);

p=(int *)malloc(n*sizeof(int));

if(!baip)

printf("memory is not accessed!\n")

else

c語言中陣列長度不能用變數定義嗎?

14樓:曉喋

1、c語言e68a8462616964757a686964616f31333365646235中不支援。

c++中支援變長陣列(你可以自行度娘變長陣列和alloca函式),但是因為其實在棧上分配,不被推薦使用。做為解決方案,你可以使用c式的malloc函式或者c++式的new函式來在堆上動態分配記憶體,這樣長度是完全可以自定的。

2、c語言是一門通用計算機程式語言,應用廣泛。c語言的設計目標是提供一種能以簡易的方式編譯、處理低階儲存器、產生少量的機器碼以及不需要任何執行環境支援便能執行的程式語言。儘管c語言提供了許多低階處理的功能,但仍然保持著良好跨平臺的特性,以一個標準規格寫出的c語言程式可在許多電腦平臺上進行編譯,甚至包含一些嵌入式處理器(微控制器或稱mcu)以及超級電腦等作業平臺。

3、、在陣列一章中,曾介紹過陣列的長度是預先定義好的, 在整個程式中固定不變。c語言中不允許動態陣列型別。例如:

用變數表示長度,想對陣列的大小作動態說明, 這是錯誤的。但是在實際的程式設計中,往往會發生這種情況, 即所需的記憶體空間取決於實際輸入的資料,而無法預先確定。對於這種問題, 用陣列的辦法很難解決。

4、為了解決上述問題,c語言提供了一些記憶體管理函式,這些記憶體管理函式可以按需要動態地分配記憶體空間, 也可把不再使用的空間**待用,為有效地利用記憶體資源提供了手段。 其它文獻中所提到的"動態陣列",指的就是利用記憶體的申請和釋放函式,在程式的執行過程中,根據實際需要指定陣列的大小.其本質是一個指向陣列的指標變數.

常用的記憶體管理函式有以下三個:分配記憶體空間函式malloc;分配記憶體空間函式 calloc;釋放記憶體空間函式free。

15樓:曠起雲戊靜

只是定義來陣列的話是不行的,你源百可以把bai陣列定度du義成指標,用zhic語言中的問

malloc來分配空間,因為dao這是你手動分配的,在不用之後答要手動釋放。

你可以如下申請

int**u

=(int

**)malloc(sizeof(int*)*m);for(int

i=0;

i

i++)

這樣專u這個指標就相當於屬一個可變的2維陣列u[m][n]了釋放時用free

16樓:匿名使用者

你可以試試用指標呀,或者是把m,n定義得足夠大。陣列的長度在定義的時候必須是一個確定的值。

17樓:程振

陣列的大復小不能用變數表制示的哦,因為

在編譯連線期間記憶體要按照你制定的長度給陣列分配相應的記憶體空間,如果是變數的話就沒有辦法給它分配了,你可以用符號常量來解決,在開頭用

# define m 100

# define n 100 然後在程式中就可以定義u[m][n]二維陣列了,當不一定非要是100,可以是任何一個正整數。

18樓:墨派

陣列大小要求是常量!當然不能是變數了!

你的問題可以這樣解決:

先算出m,n的值,

再用new去申請

如:int a;

int *pa=new a[m][n];

19樓:

先定義一個足夠大的二維陣列 例:

u[100][100]

20樓:匿名使用者

只是定義陣列的話是不行的,你可以把陣列定義成指標,用c語言中的 malloc來分配空回間,因為這是你手動答分配的,在不用之後要手動釋放。

你可以如下申請

int **u = (int **)malloc(sizeof(int *) * m);

for(int i=0; i

21樓:匿名使用者

動態分配記憶體,c用malloc

c++,用new

22樓:cabbage包菜

定義陣列的時候,copy陣列的大bai小必須確定,並且是du整型。

在c99中提出了變長

zhi陣列,即為val,意dao

思是你可以用一個變數去代替陣列的大小。

例如 int val = 5;

int a[val];

變長陣列中的變,也只是說你可以用變數去定義陣列,但是變長陣列的大小在建立後就是不變得,

而且變長陣列必須的自動的儲存類。

由於變長陣列的限制太多了,很少人去使用他。

所以對你這個問題,需要使用動態記憶體,即用malloc calloc 這類的函式。

23樓:鑽時封芯

只是不行的,一般也不必這麼做

24樓:劼翾

不能,這你可以使用動態儲存分配。方法是:

int *p=new int [m][n]中間應用,用完後記得使用

delete [ ]p

好了,給分吧。呵呵

25樓:匿名使用者

c語言中不支援來。

c++中支援變長自

陣列(你可以自行度bai娘變長陣列和dualloca函式),但是因為其實在zhi棧上分配,不被推

dao薦使用。

做為解決方案,你可以使用c式的malloc函式或者c++式的new函式來在堆上動態分配記憶體,這樣長度是完全可以自定的。

你好,我想問一個問題,就是用c想定義一個可變的陣列,比如輸入5,則定義一個大小5的陣列該怎麼用c編寫?

26樓:匿名使用者

//陣列貌似要指定長度大小,要麼如a[10]或巨集定義一個如m,然後a[m]

//下面的程式在一定程度內上可以滿足你的問題。容。。

#include

#define m 100

main()

27樓:筱原雪平明子

一樓的復愛卓霖同志 說的沒制錯,我們現在學c語言,老師也經常強調這個問題,昨天有個男生就是想像你這樣,先scanf一個n,然後再以n為長度,定義一個陣列,結果沒有成功。我們老師推薦的方法是,你先#define n 30(或者一個更大的數,只要夠你的陣列用就可以),然後再往裡面填充你的資料,然後你可以用n=strlen(陣列名)的函式計算出陣列確切長度(不包括終止符'\0',如果你使用gets接受的話),當然如果你用這個函式,在開頭要加上#include這個類庫函式。

用指標也是一個很好的辦法。推薦你用結構體定義,我們現在學的是堆疊,結構體大概這樣定義:

struct stack()

;用結構體加連結串列 刪減資料,更新資料,定位節點都挺方便的。

28樓:醉月空明

陣列什麼型別能?例如整型:int s[5];

29樓:愛卓霖

c裡面必須要大小,除非你用指標。

c語言 定義陣列時 大小必須是常量嗎

30樓:yesyes科

1、首先雙擊啟bai動visual studio 2015,單擊「檔案du」-「新建」-「專案zhi」,dao選擇visual c++,然後是「空專案」。

回2、定義了2個一維陣列,一個名為

答arry1的整形陣列,有1個元素;arry2為實型陣列,有100個元素,注意陣列下標是從0開始的,不是從1開始,比如arry1的第一個陣列為arry[0]不是arry[1]。

3、對陣列賦值或者部分賦值,第一個表示x[0]=1,x[1]=2,x[2]=3,x[3]=4,x[4]=5;第二個表示對前三個元素賦值,後面的元素都為0,x[0]=1,x[1]=2,x[2]=3,x[3]=0,x[4]=0。

4、一般形式:陣列名[下標1][下標2],下標也是從0開始表示是第一個元素。

5、最後對二維陣列賦值:int x[2][2] = , }表示x[0][0]=1,x[0][1]=2,x[1][0]=3,x[1][1]=4,x[0][0]表示第一行第一列,其他依次類推即可。

c語言斐波那契數列的定義為,c語言斐波那契數列的定義為F11,F21,FnFn2Fn1請輸出斐波那契數列的前n項。

include int arr 100 int main return 0 水題 用遞迴會爆的 急急急 計算fibonacci數列前n項和,提示f n 定義 f n f n 1 f n 2 用c語言程式設計 急求 在此借用一下夜遊神小翠的程式 include define n 20 int fibo...

C語言題 若n的值為2,語句while n執行的次數是多少?執行完後n的值為多少

當n為2的時候,程式執行一次,執行之後n的值為1當n為1的時候,程式執行一次,執行之後n的值為0當n為0的時候,程式不執行 所以程式執行2次,執行之後n的值為0 在c語言復中,執行的次制數是兩次,執行完後n 1。可以用以下 進行測試 main printf d,d n,i 在分析來時請注意n 和 n...

C語言中陣列中下表為偶數的元素從小到大排列

include include void main puts a printf n 兩處 錯誤均已標出 c語言將字元陣列a中下標為偶數的元素從小到大排列 第一個空填 i 10 第二個空 j 3 0 第三個空那裡有問題.當第一次迴圈時,i 0那內迴圈不是j 2 這樣就錯了.include stdio....