1樓:草原上之狼
這裡用到的是陣列指標
二維陣列為x[n][m]
每行m個元素
定義指向這個陣列的陣列指標就需要 char (*ss)[m];
呼叫後 x和ss等效
迴圈按行迴圈 所以第二個空是n
陣列名跟著一箇中括號
對於二維陣列來說, 是對應行的首地址。 比如 x[1]就是第二行的首地址
陣列定義中的方括號[]是一個運算子,還是一個其他型別的符號?
2樓:礦工醬
這個最佳答案是錯誤的。
陣列定義中的中括號就是表示它是個陣列,屬於語法範疇(就跟函式呼叫裡面的逗號,語句後面的分號,還有語句塊的大括號一樣),不算運算子,不能更改和過載,例如 int a[10]或者int *a = new int[10]等。
但是c和c++語言裡中括號還有個用法就是作為一個運算子,是一個叫做「陣列下標運算子」的雙目運算子,即a[b]。這個預設等價於*(a+b)。但是在你自己定義的類中,這個運算子是可以過載的,使之不等於*(a+b),這個時候這個運算子的意義就不是「陣列下標」了,而是你自己定義的了,甚至可以像括號那樣用。
3樓:精忠報國何須悔
選 d 一維陣列的定義方式為: 型別說明符 陣列名 [常量表示式] 注; 常量表示式中可以包括常量和符號常量,不能是變數。也就是說,c不允許對陣列的大小作動態定義,即陣列的大小不依賴於程式執行過程中變數的值。
4樓:匿名使用者
c語言陣列名後面那個中括號[ ]裡可不可以是表示式?為什麼
5樓:匿名使用者
我覺得陣列的【】括號中的一定是常量,否則在編譯器無法設定記憶體空間。所以可以是表示式,但是應該是常量表示式,不能是變數。
6樓:淦海瑤
可以,但是要注意一點,
這個表示式返回值一定要是正整數或者零
其他的都是錯誤的
給你舉個例子吧
如求一個數字字串中數字出現的頻率
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
7樓:1個魜_等待
陣列必須先分配記憶體空間才能使用,所以初始化的時候不能是表示式,但是卻可以這樣用:
int a[11]; for(int i = 10; i>5; i--) a[i-5] = 1;
8樓:周碧嬌是我老婆
「」中間必須是整形常量或整形常量表示式。
陣列定義時,必須指定陣列的大小,陣列大小必須是整形常量表示式,不能是變數或者變數表示式
錯誤例子:int n=10; int a[n]; int b[10.3]; int c[n+10];
9樓:匿名使用者
可以是返回值為正整數的表示式
c語言中一維陣列正確的定義
10樓:旅者一生
符號常量是用一個識別符號來表示一個常量,一維陣列的定義方法為:型別說明符+陣列名+[常量表示式];
型別說明符是任一種基本資料型別或構造資料型別。陣列名是使用者定義的陣列識別符號。方括號中的常量表示式表示陣列元素的個數或者長度,可以是常量或符號常量,不能為變數。
例如:1、int x[8]; 表示定義一個整型陣列x,陣列長度為8.
2、float a[8],b[10];表示定義一個實型陣列b,陣列長度為8,一個實型陣列c,陣列長度為10
3、 ch[15]; 表示定義一個字元陣列ch,陣列長度為15。
擴充套件資料
在程式中可以使用下標變數,即說明這些變數的整體為陣列,陣列中的每個變數的資料型別是相同的。當陣列中每個元素都只帶有一個下標時,稱這樣的陣列為一維陣列。
一維陣列是由數字組成的以單純的排序結構排列的結構單一的陣列。一維陣列是計算機程式中最基本的陣列。二維及多維陣列可以看作是一維陣列的多次疊加產生的。
陣列是計算機程式設計中的重要概念,運用陣列可以方便地處理大規模的資料。
11樓:
定義如下:
符號常量是用一個識別符號來表示一個常量,一維陣列的定義方法為:型別說明符+陣列名+[常量表示式];型別說明符是任一種基本資料型別或構造資料型別。陣列名是使用者定義的陣列識別符號。
方括號中的常量表示式表示陣列元素的個數或者長度,可以是常量或符號常量,不能為變數。
12樓:
這道題正確的答案是:c選項。
a. int a (5);
錯誤,因為不能用(),()一般函式,以及(*int)強制轉換型別。
b. int n=5, a[ n ];
錯誤,因為不能是變數。
c.int a[sz];
正確,sz為符號常量,如被定義是:#define sz 10,這就是int a[sz];
符號常量的解釋:
1、符號常量是:在c語言中,可以用一個識別符號來表示一個常量,稱之為符號常量。
2、符號常量在使用之前必須先#define定義(如**1),一般使用const來指明(如**2)。
**例項1:#define max_size 256;
**例項2:const int max_size =256;
3、#define 也是一條預處理命令(預處理命令都以"#"開頭),稱為巨集定義命令,通過前處理器來替換符號常量,其功能是把該識別符號定義為其後的常量值。
一經定義,以後在程式中所有出現該識別符號的地方均代之以該常量值。習慣上符號常量的識別符號用大寫字母,變數識別符號用小寫字母,以示區別。
4、符號常量雖然有名字,但它不是變數。它的值在其作用域內是不能改變的,也不能被賦值。
5、使用符號常量的好處是:1、含義清楚。2、在需要改變一個常量時能做到「一改全改」。
13樓:匿名使用者
在c語言中使用陣列必須先進行定義。一維陣列的定義方式為:
型別說明符 陣列名 [常量表示式];
其中,型別說明符是任一種基本資料型別或構造資料型別。陣列名是使用者定義的陣列識別符號。方括號中的常量表示式表示資料元素的個數,也稱為陣列的長度。例如:
1、int a[10]; /* 說明整型陣列a,有10個元素 */2、float b[10], c[20]; /* 說明實型陣列b,有10個元素,實型陣列c,有20個元素 */
3、 ch[20]; /* 說明字元陣列ch,有20個元素 */
14樓:匿名使用者
c語言中定義一維陣列如下:
資料型別 陣列名[陣列長度]; // 不進行初始化的陣列
資料型別 陣列名[陣列長度] = ; // 進行初始化的陣列
舉例如下:
// 定義一個int型的未進行初始化陣列data1
int data1[5];
// 定義一個int型的數
組data2,並對陣列中各元素進行初始化
int data2[5] = ;
擴充套件資料:
定義陣列的定義格式如下:
型別識別符號 陣列名[常量表示式]
說明:①陣列名的命名規則與變數名的命名規則一致
②常量表示式表示陣列元素的個數。可以是常量或符號常量,不能為變數。
例如:int a[10]; //陣列a的定義是合法的
int a[n];
引用通過給出的陣列名稱和這個元素在陣列中的位置編號(即下標),程式可以引用陣列中的任意一個元素。
在c++中,一維陣列的引用格式為:陣列名[下標]
例如: int a[10];
其中,a是一維陣列的陣列名,該陣列有10個元素,依次表示為a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]。需要注意的是,a[10]不屬於這一個陣列的空間範圍中。當在說明部分定義了一個陣列變數後,編譯程式會在記憶體空間中開闢一串連續的儲存單元。
對於陣列而言,程式的執行部分使用的是陣列變數而不是陣列型別。需要注意的是:在引用時,下標可以是整型變數或整型表示式。
如果使用表示式,會先計算表示式以確定下標。程式只能逐個應用陣列中的元素而不能一次引用整個陣列。如:
int a[100],b[100]; a=b;
15樓:一隻蟈蟈
陣列的定義格式如下:
型別識別符號 陣列名[常量表示式]
說明:
①陣列名的命名規則與變數名
的命名規則一致
②常量表示式表示陣列元素的個數。可以是常量或符號常量,不能為變數。
例如: [1]
1、 int a[10]; //陣列a的定義是合法的
2、 int a[n]; //若n為變數,則陣列a的定義是非法的
拓展資料:
對於陣列型別說明應注意以下幾點:
1) 陣列的型別實際上是指陣列元素的取值型別。對於同一個陣列,其所有元素的資料型別都是相同的。
2) 陣列名的書寫規則應符合識別符號的書寫規定。
3) 陣列名不能與其它變數名相同。例如:
int a;
float a[10];
是錯誤的。
4) 方括號中常量表示式表示陣列元素的個數,如a[5]表示陣列a有5個元素。但是其下標從0開始計算。因此5個元素分別為a[0], a[1], a[2], a[3], a[4]。
5) 不能在方括號中用變數來表示元素的個數,但是可以是符號常數或常量表示式。例如:
#define fd 5
// ...
int a[3+2],b[7+fd];
是合法的。但是下述說明方式是錯誤的。
int n=5;
int a[n];
6) 允許在同一個型別說明中,說明多個陣列和多個變數。例如:
int a,b,c,d,k1[10],k2[20];
16樓:風不停息
符號常量的概念是:在程式執行過程中,其值不能被改變的量稱為常量.用一個標示符代表一個常量的符號,稱為符號常量
符號常量在使用之前必須先定義,其一般形式為:#define 識別符號 常量
其中define是一條預處理命令,被叫做巨集定義命令,功能是把這個識別符號定義為常量值。經過定義之後程式中所有出現這個識別符號的地方都用這個常量值代替。
擴充套件材料:
另一層含義指它們的編碼方法是不變的(但是嚴格來說『人為規定的某一種方法也可以因地制宜而人為改變,所以其本身數值大小『不是『常量』的內涵』),比如字元'a'無論在硬體、軟體還是各種程式語言中,它的資訊編碼即為 『 0x41』。
在除了『c/c++』的一些高階程式語言中,『常量』可以被稱作,「在一個資訊變化過程中,始終不發生改變的量」,其可以是不隨著時間變化的某些量的固定資訊;也可以表示為某一數值的字元(或字串),常被用來標識、測量和比較兩者的差異。
但在 『c/c++語言中』,『常量』如果還用『執行過程中不變的量』來描述,就顯得不太準確了,甚至是在具體使用時,這就是一個錯誤的概念。在 『c/c++』中,定義『指標常量』時,根據『const 』的位置的不同,可以定義出幾個不同的形式,雖然其看起來『符合常量的概念』,但是在實際執行中,其值或地址值是會發生變化的。所以本質還不是『常量概念』
形式為 :const type name = value;
例如:const int months = 12;
這樣就可以在程式中使用months而不是12了。常量(如months)被初始化後,其值就被固定了,編譯器將不允許再修改該常量的值。假如您這樣做:
months = 18;
是不對的,就好像您將值4賦給值3一樣,無法通過編譯。
此外注意應在宣告中對const進行初始化。下面的**是不正確的:
const int toes;// toes的值此時是不確定的
toes=10;//這時進行賦值就太晚了
C語言中有什麼函式能求二維陣列的一維陣列的長度
你要了bai解二維陣列其實是 du模擬一維陣列zhi 的,因為計算機的儲存機制是一維dao的內.charstr 20 50 這樣其實是定義了20組容一維陣列,其中每組又含有50個char型變數的陣列.你用strlen str 是不行的.這是求一個字串有多少個字元的.應該用sizeof str 這樣就...
C二維陣列的程式,一個 C 二維陣列的程式
陣列太大了,看看下面 一個由 c c 編譯的程式佔用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由 os 注意它與資料結構中的...
用c語言如何定義較大的二維陣列例如1000行
void main 這樣定義沒有問題 array size too large 陣列太大 分析 定義的陣列太大,超過了可用記憶體空間。可能是你的可用記憶體空間太小 用int定義所佔空間較大,如用unsigned char定義空間會節約很多,不過還是不能滿足1000行1000列的要求,微控制器內的資料...