關於c語言陣列的方括號中能不能使用變數的問題

2021-03-10 07:22:39 字數 3222 閱讀 1833

1樓:四舍**入

方括號裡必須是一個大於零的整數常量或者常量表示式。

常量表示式(const experssion):是指值不會改變專 並且在編譯過屬程就能得到計算結果的表示式。字面量屬於常量表示式,用常量表示式初始化的const物件也是常量表示式。

一個物件(或表示式)是不是常量表示式由它的資料型別和初始值共同決定。

const int a =1; //常量表示式cosnt int b=a+1; //常量表示式int c=2; //初始值是字面值常量,當c資料型別是普通int。

2樓:匿名使用者

陣列的方括號復有兩種使用制情況。

1 定義。

當用於定義時,bai陣列方括du號中的是陣列含有的元素個zhi數,即定dao

義了陣列的規模。

這種情況下,按照ansi c的標準,是不可以用變數的。

不過目前有些編譯器支援了c99及以上規範,在c99下,c語言陣列定義時可以使用變數。

至於編譯器是否支援,定義一個以變數為規模的陣列,編譯一下,如果能通過,那麼就是支援的,反之則是不支援。

由於並不是所有編譯器支援,這樣的**就不易於移植,所以不推薦使用這種寫法。如果一定需要用動態值,可以採用動態陣列的方式。

2 取值。

當取陣列a的第n個元素值時,可以使用a[n]的方式。

這種取值操作的情況下,是可以使用變數的。對此,任意版本的c語言都沒有做限制。

不過其中的變數只能為整型系列的型別,比如char, short, int, long等,或者對應的無符號型別。

3樓:匿名使用者

其實baic語言的較新版本標準

是支援du

int n=5;

int a[n];

的用法的,只是vc一直只zhi支援舊版本的標準dao而已……不過對回於這個問題,原答因不是這個。int a[n];是物件宣告,a[i++]=i;是表示式中的運算,二者是完全不同的東西……

4樓:匿名使用者

好多大學課本教程是老版的c語言了,在vc++6.0編譯器裡(好多年前的編譯器了,已經沒有更新了),int a[n]是錯誤的,用別的編譯器就沒事,比如dev c++

5樓:匿名使用者

這句話你要仔細理解,人家說的是對陣列的「定義」不能用動態定義,就是說陣列在定義時不能依賴於程式執行過程中變數的值,第二個例子並不是對陣列定義而是陣列運算

6樓:匿名使用者

是宣告的時候不能用變數去指定初始大小,訪問的時候是可以的

7樓:匿名使用者

陣列,沒好好看啊,定義和使用的區別

8樓:為明天_小樂

上面的為一個陣列的宣告,而n為5,如果按照main中的執行順序的話看上去是沒有問題的..並且版有的編譯權器也支援(例如dev--c++)但是a是一個陣列,在編譯的時候其需要一個特定的大小來讓系統為其分配記憶體空間,,它與下面的i++不同,在i++操作之前,a陣列的大小已經固定了,所以可以通過.

9樓:匿名使用者

只是定義

bai的時候不能用變數

du。a[i++]這是你前面zhi已經定義好了的dao a[10]。記住!!

a[ ]方括號內可以專用變數,只是定義屬的時候不能用變數。如果一定要用字母表示可以這樣寫:#define n 5

int main()

n其實也是前面定義的一個常量。

10樓:匿名使用者

int a[n],是在定義一個陣列,而陣列的長度為n,n是一個變數,這在c語言是不允許,c語言不支回持定義變長答陣列,因為在編譯的時候,系統無法知道陣列的長度是多少,也就無法為這個陣列分配一個空間。

解決的方法有:

1、#define n 5

int main()

2、#include

int main()

c語言的陣列的中括號中數字能否省略?什麼時候可以省略? 5

11樓:匿名使用者

在定義陣列時同時初始化,括號中數字可省略,如:int a=;這個陣列大小是5,範圍是a[0]到a[4],但是如果你希望定義一個長度是10的陣列,但只初始化前5個資料,這時候必須帶上數字,如:int a[10]=;這時候a陣列一共有10個數字,前5個是1到5,後5個是0

或者二維陣列,可以省略行數,但不可以省略列數,如int a[4]=,,};這詩系統自動預設行數是3

還有就是形參中,可以省略一維陣列的長度或者二維陣列的行數,如:void fun(int a,int b[4])這個函式中第一個引數是一維陣列,只要實參傳來一個一維陣列即可接收到,不需要長度完全一樣,同理,第二個引數也是,只要傳來一個列數為4的二維陣列即可

大概就以上3中情況吧希望對你有幫助

12樓:匿名使用者

int a=; 可以在定義的時候給出初始值。可省略。

int b[5]=; 同上,但是第二個不能省略。

a=3; 這樣做就不對了,裡面沒有定位,不能省略。

b[2]=2; 同上,不能省略。

a[x]=3;這樣做也對,但是要保證變數x的值正確。c不會自動給你查越界。你自己要小心。

13樓:倒黴熊

可以省略

例如:int a = ;

編譯器會根據後面的元素的個數來確定陣列的範圍。

在引數傳遞中,可以寫成 void fun(int a)這種形式,因為引數傳遞中已經退化為指標了,元素的個數需要其他引數確定。

要大體說什麼時候可以省略,那就是你能夠保證編譯器能夠知道你陣列的元素個數才能省略。

14樓:匿名使用者

所有元素都已羅列出來,可以省略行標:

如 int a[4][3]=;

可以省略為int a[3]=;

15樓:

c99標準以前:

宣告時可以省略: extern int myarray;

定義時包含初始化可以省略:int myarray=;//根據初始化陣列元素的多少而預設大小

形參中的陣列不需要數字

c99標準:

可以用表示式確定陣列大小: int myarray[*];//但只能是區域性變數,而且goto語句將不能使用

16樓:匿名使用者

作為參考變數的時候可以省略,或者對於陣列同時宣告和定義的時候也可以省略

c語言程式設計能不能編個顯示是iloveyou的圖案艾高

1 用字串輸出i love you main printf s st2 2 用井號拼出來 include stdio.h main int loop,loop2,loop3,tmp for loop 0 loop 8 loop else else tmp 2 putchar n printf end...

C語言中關於二維陣列的問題,c語言關於定義二維陣列的問題

float a 5 是定義了一個指向陣列的指標,如果要把它當成二維陣列的話,相當於列數為5,行數可以動態分配。如 float a 5 int n 2 定義行數為2 a new float n 5 int sum 0 for int i 0 i 對於你定義的這個陣列,它表示有5個float 型別的指標...

c語言中能不能將整數賦給指標變數

系統記憶體使用是作業系統規定的,如果你希望直接操作記憶體,就必須瞭解系統的記憶體的分配情況,否則造成的損失可能是致命的。你的舉例是不完整的,如果說 point 1 100是非法的,完整語句應該是int point 1 100,之所以非法是因為100不是使用者可以操控的記憶體區域。p 1之所以數合法的...