c語言陣列名後面那個中括號裡可不可以是表示式?為什麼

2021-03-13 21:03:28 字數 5210 閱讀 1219

1樓:匿名使用者

我覺得陣列的【】括號中的一定是常量,否則在編譯器無法設定記憶體空間。所以可以是表示式,但是應該是常量表示式,不能是變數。

2樓:淦海瑤

可以,但是要注意一點,

這個表示式返回值一定要是正整數或者零

其他的都是錯誤的

給你舉個例子吧

如求一個數字字串中數字出現的頻率

char a[100];

int b[10]=;//計數數字出現的次數int i=0;

gets(a); //輸入數字,否則有可能出錯,因為b的下標超過9while(a[i])

b[a[i++]-'0']++; //這裡a和b的下標都是表示式

a的下標是i++,是正整數或零

b的下標是a[i++]-'0'是a[i]中的數字的ascii碼值減去0的ascii碼值,是0~9

3樓:1個魜_等待

陣列必須先分配記憶體空間才能使用,所以初始化的時候不能是表示式,但是卻可以這樣用:

int a[11]; for(int i = 10; i>5; i--) a[i-5] = 1;

4樓:周碧嬌是我老婆

「」中間必須是整形常量或整形常量表示式。

陣列定義時,必須指定陣列的大小,陣列大小必須是整形常量表示式,不能是變數或者變數表示式

錯誤例子:int n=10; int a[n]; int b[10.3]; int c[n+10];

5樓:匿名使用者

可以是返回值為正整數的表示式

c語言中中括號什麼意思?[ ]

6樓:9點說史

該中括號為陣列標識。

int a[6];就是定義一個一維陣列,這個陣列名叫做 a ,共有

內6個元素;同理int b[6][6];就是定容

義一個二維陣列,這個陣列共有6*6個元素。

定義之後,就可以引用該陣列的元素,但不能直接用 a[6] ,a此時包含的元素只有a[0],a[1],a[2],a[3],a[4],a[5]這6個。

c語言支援定義一系列相同連續的變數空間,其定義形式為type name[n];代表定義個數為n,每個元素型別均為type型的陣列變數name。

在c中規定,陣列元素的下標n是從0開始計數的,所以對於定義的a[100], 其合法的元素為a[0], a[1],.... , a[99]。

擴充套件資料

識別符號(identifier)是指用來標識某個實體的一個符號,在不同的應用環境下有不同的含義。在計算機程式語言中,識別符號是使用者程式設計時使用的名字。

用於給變數、常量、函式、語句塊等命名,以建立起名稱與使用之間的關係。識別符號通常由字母和數字以及其它字元構成。

7樓:哇哎西西

中括號為陣列標識bai。

例如:放入4個整du數,就得分

zhi配dao4個int型別的記憶體空間:內int a[4];

這樣,就在容記憶體中分配了4個int型別的記憶體空間,共 4×4=16 個位元組,併為它們起了一個名字,叫a。

8樓:匿名使用者

陣列的下標

比如du你說zhi的

int a[6];

就是dao定內義一個一維陣列容,這個陣列名叫做 a ,共有6個元素同理int b[6][6]

就是定義一個二維陣列,這個陣列共有6*6個元素定義之後,就可以引用該陣列的元素,但不能直接用 a[6] ,a此時包含的元素只有a[0],a[1],a[2],a[3],a[4],a[5]這6個

9樓:匿名使用者

陣列。表示有6個int型的資料,從a0到a5

10樓:匿名使用者

定義陣列a,陣列中包含6個數

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

11樓:四舍**入

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

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

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

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

12樓:匿名使用者

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

1 定義。

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

義了陣列的規模。

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

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

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

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

2 取值。

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

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

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

13樓:匿名使用者

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

是支援du

int n=5;

int a[n];

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

14樓:匿名使用者

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

15樓:匿名使用者

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

16樓:匿名使用者

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

17樓:匿名使用者

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

18樓:為明天_小樂

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

19樓:匿名使用者

只是定義

bai的時候不能用變數

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

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

int main()

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

20樓:匿名使用者

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

解決的方法有:

1、#define n 5

int main()

2、#include

int main()

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

21樓:匿名使用者

在定義陣列時同時初始化,括號中數字可省略,如: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中情況吧希望對你有幫助

22樓:匿名使用者

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

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

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

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

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

23樓:倒黴熊

可以省略

例如:int a = ;

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

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

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

24樓:匿名使用者

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

如 int a[4][3]=;

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

25樓:

c99標準以前:

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

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

形參中的陣列不需要數字

c99標準:

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

26樓:匿名使用者

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

陣列名和指標的區別C語言中陣列名和指標的區別

可以!下面是我學習陣列和指標的總結 1 指向陣列首地址 對於一維陣列a 10 陣列的首地址為a 呼叫 p a a i 或者 p i 對於二維陣列a 3 4 整個陣列的首地址為a 0 呼叫 p a 0 a 0 i 或者 p i 此時a代表陣列第一行的地址。3 指向陣列的每行 形如 int a 3 4 ...

C指標與陣列名的區別,求助高手

首先,第一行肯定是輸出亂碼,解釋2個知識點你就知道了 1.陣列和指標的區別,其實對於你的問題這不是最重要的,不過既然你問道區別就說說吧 陣列名確實表示指向陣列首地址的指標,但這個指標很特別,它的值 指標的值指的是指標所指的地址 不能被改寫,能改寫的僅僅是其指向的內容,換句話說,陣列名只能指向陣列的首...

c語言程式設計 用陣列名作函式引數,編寫對一維陣列求平均值的

include include include float b float arr,int n 少了函式宣告 void main printf 平均值是回 f b a,n 個函式傳的答是陣列的首地址 float b float arr,int n c sum n return c 函式在前面沒有宣告...