C C 陣列的疑惑,C 陣列問題

時間 2022-06-13 10:55:09

1樓:匿名使用者

貌似你那樣的寫法是錯誤的。

陣列的長度必須是常量,因為編譯的時候,編譯器就會給陣列分配好記憶體空間。

如果陣列的長度是變數編譯後會告訴你,『a':未知大小,或者提示長度應輸入常量,或者,不能分配常量大小為0的陣列。

所以你以前的寫法是錯的~~~

不能改變陣列長度是陣列最大的弊端~

2樓:匿名使用者

這個問題偶也碰到過,一般是編譯器不同。

我看過一本以turbo c 2.0 講解的一本書,書中:int n = 5; int score[n];是錯誤的,vc 6.0下 也是錯誤的,親自編譯過,確實如此。

在codeblocks下編譯時沒問題的,

codeblocks下 c compiler 我的設定是:mingw32-gcc.exe

c++ compiler 我的設定是:mingw32-g++.exe。

3樓:匿名使用者

你應該去式一下

int n;

cin>>n;

int a[n];

(你肯定沒有測試過)

肯定是編譯不過的

編譯的時候不知道n的值,所以編譯器不知道分多大的空間給a陣列

學過彙編的就會很清楚這點

4樓:匿名使用者

這樣寫在vc6.0 和 vs 2008 都是編譯不過的,陣列的大小必須是個常量,否則編譯不過,我上學期剛學的c++,你用的是什麼編譯器,

c++陣列問題

5樓:匿名使用者

1float我沒加a的時候是提示error c2133: 'f' : unknown size

定義float陣列的時候,如果沒有初始化,必須給出陣列長度,不能為空。

如果給出初始化,編譯器會自動分配長度,比如

float a=;

這是可以的,編譯器自動分配陣列a的長度為2,並用1和3來初始化兩個成員。

2我加了a變成float【a】就提示error c2057: expected constant expression

: error c2466: cannot allocate an array of constant size 0

: error c2133: 'f' : unknown size

定義陣列長度時必須用常量(也就是編譯階段就能知道具體值的量),

比如字面值常量5、20等,

或者是#define的常量,比如

#define max 10

float f[max]; // ok

或者是const常量,比如

const int max = 10;

float f[max]; // ok

總之定義陣列,必須讓編譯器知道陣列的長度,這樣才能分配空間。

6樓:伊·梵

仔細看看陣列定義的部分

int a[10];

int a[10] = ;

int a = ;/* 相當於 int a[3]=; */陣列要求在編譯時就確定大小,不能用變數來定義陣列大小,也不能不指定陣列大小

int b=10;

int a[b]; /* error */int a; /* error */

你給這一部分**完全沒必要定義f,直接刪掉就可以。

7樓:匿名使用者

float *f = (float *)malloc(sizeof(float) * a);

最後free(f);

c/c++ 陣列引數傳遞後,還能計算長度嗎

8樓:匿名使用者

一般是不能計算的,除非傳人引數的時候,把陣列長度一起傳進來

一般計算長度是用sizeof(arrayname)/sizeof(arrayname[0]),但陣列名作為引數時,是被當作指標來對待的,所以sizeof(arrayname)就是4個位元組(乙個指標的占用長度),也就不是我們想要的整個陣列的長度了。

c/c++如何返回乙個陣列啊?

9樓:

在c/c++中是不允許返回陣列的,只能返回陣列的指標。但這樣做危險性很大,如果返回的是被調函式中定義的自動型陣列,函式結束後陣列空間已經不受**控制了,通過返回的指標在主調函式中操作這塊空間會產生不可預料的結果。所以一般應在主調函式中宣告陣列,把它的指標傳給被調函式,在被調函式中通過這個指標直接操作主調函式中的陣列。

也可以在被調函式中動態宣告陣列,將它的指標返回給主調函式進行後續操作,但不能忘記在操作完畢後釋放動態陣列,不然會產生記憶體洩漏問題……

10樓:理性的傳教士

你的意思不是不用類ctest中的陣列去初始化陣列x?如果是那樣的話,就試一試下面的吧:

for(int i=0;i<5;i++)

x[i]=*(ctest.getb()+i);

11樓:非常

為什麼不行?你希望怎麼個取法呢?這樣不知道是不是你要的意思啊~賦初值啥的我就隨便寫了……下面的不知道有沒有幫助

class ctest

//這裡想要乙個得到整個陣列的方法

int *getb( void )

};int main()

c/c++中動態陣列array的用法

12樓:糖糖寳寳

strarr: array of string; //動態陣列定義時不與維數

begin

setlength(strarr,6); //分配6個元素位置: 0-5

strarr[0] := '萬一'; //動態陣列的下界是 0

showmessage(strarr[0]); //分配空間後和靜態陣列一樣使用

strarr := nil; //一般沒必要手動釋放, 動態陣列離開作用域會自釋放

例如:arr1,arr2: array of integer;

a: array[0..1] of integer;

begin

setlength(arr1,6);

arr1[5] := 100;

arr2 := arr1; //arr2 引用了 arr1

showmessage(inttostr(arr2[5])); //100

showmessage(inttostr(length(arr2))); //當然 arr2 維數也會是 6

showmessage(inttostr(sizeof(arr1))); //4, 其實動態陣列是個指標

showmessage(inttostr(sizeof(arr2))); //4

arr2[5] := 99; //現在它們指向同乙個陣列, 改變這個就是改變那個

showmessage(inttostr(arr1[5])); //99

arr1 := nil; //釋放其中乙個指標, 陣列繼續存在

showmessage(inttostr(arr2[5])); //99

13樓:匿名使用者

一維的動態陣列就不說了,給你乙個二維動態陣列的例子:

#include "stdafx.h"

#include

using namespace std;

int main()

}//迴圈顯示

cout<<"the dynamic array is "<

for(int i=0;i

cout<

}return 0;}

14樓:匿名使用者

new arry

delete arry

乙個c/c++語言的問題關於陣列

15樓:weida愛問

這個,,你要理解 c語言引數傳遞的機制,,,在main函式裡,a表示乙個陣列,你sizeof(a),也就是該陣列的大小,所以是4*5=20個位元組; 而fun(int a),這表示把乙個陣列傳遞給該子函式,這裡的a只是代表這整個陣列的首位址,,相當於int *a;所以傳遞的是乙個整形指標,所以sizeof(a)就是4,因為指標變數只佔4個位元組!

16樓:巨之說

因為在函式fun(int a)裡面的形引數組int a實質上是乙個指標變數,即等價於fun(int *a)。此時,只能將主函式中陣列a的首位址傳到fun函式,而不能傳遞陣列元素個數。

因此在函式fun裡邊,用sizeof算出來的是指標變數的位元組數,跟main函式中陣列a的位元組數無關。

一般設定第二個引數,專門傳送陣列元素的個數。例如,fun(int a,int n)

17樓:匿名使用者

int 型別的 sizeof(int)=4;

sizeof本身不是函式;

18樓:匿名使用者

fun(int a)

c/c++語言中的指標和陣列我總是理解不了,誰能給我詳細講解一下?

19樓:dl狼狼

陣列就像樓房裡挨著的乙個個房間,每個房間裡都是有著相同資料型別的資料訪問陣列元素的下標就像是門牌號

指標就像是乙個路標 指向乙個地方

用字串給指標賦值的意思是把這串字元在記憶體中的首位址給指標其實陣列名的本質也是乙個位址,不過這個位址不允許修改

20樓:匿名使用者

首先你要知道乙個變數對應乙個位址空間,比如a=1,a是乙個變數,那a在記憶體空間裡就有乙個位址(比如位址為b),就像乙個房間,1代表裡面的人,b就是門牌號。

然後你應該知道int a是用來定義變數的,那如何來定義位址呢?那就用指標int* a。

意思就是想要得到內容就用變數,想得到這個內容所存放的位址就用指標

再然後用int a定義之後,a就代表內容,用&a來代表a的位址。用int* a定義了指標之後,*a就代表內容,a就變成了位址。

至於陣列和指標比較像,比如定義了乙個int a[10],那a[0]-a[9]就是內容,這裡要注意,這裡的a就是整個陣列第乙個內容a[0]的位址

至於用法用處就比較多了 想更多了解可以追問 或者加q

21樓:鎏金閣

再舉個通俗的例子:假設班級舉行外出活動,約定把具體活動地點寫在教室黑板blackboard上。這時,黑板就是指標變數blackboard,黑板中的內容就是索引位址。

同一塊黑板變數,可以改編不同的活動地點,也即指向不同的活動位址。而各位址的活動內容要到當地才能知曉,即*blackboard是指標所指向的真正內容。

22樓:匿名使用者

去學彙編``分分鐘的事情`.

c指標陣列問題,C 中關於指標陣列的問題。

typedef 是 定義一種資料型別 就好像內建的資料型別如 int 它僅是乙個定義,不產生例項物件,即不分配任何記憶體,怎麼能給它賦值呢?對陣列賦初值的方法用for迴圈,在這裡還可用memset nod的記憶體分配在動態棧上,所以值不能確定,要初始化,必須使用顯式的方式。cdma980的回答是對的...

C 陣列問題

ia就是陣列首位址,按照你的定義ia一共有3個元素,位址分別是ia,ia 1,ia 2,你用ia 3之後的位址都是越界的,會訪問到其他未知資料。是ia的位址加上偏移量,你可以看看診斷程式的結果,就明白了。include int a void main 他表示偏移了a 1 a 1 4 得道的位址。對啊...

C 關於陣列的問題,c 的乙個關於陣列的問題

1 主要問題在陣列的動態分配。main 以前 應當寫宣告,不能寫語句。所以把開始的幾句改成 include using namespace std int n1,n2,n3 int data1,data2,data3 改成這樣 再把 main 開始改成 int main n1 n2 n3 100 d...