在前一篇文章中已經寫了一維陣列的定義和使用,今天寫二維陣列和字元陣列,它們的定義和一維陣列的定義是一樣的。二維陣列定義如下:資料型別 二維陣列名 [第一維陣列長度][第二維陣列長度];
int a[2][3];
定義了乙個int型的二維陣列,2行3列,共有2*3=6個元素,陣列名為a。元素排列如下所示:a[0][0],a[0][1],a[0][2]a[1][0],a[1][1],a[1][2]
二維陣列在記憶體中的儲存方式按行排列的,a[0]行,a[1]行,a[2]行;每一行的三個元素也是依次排列的。二維陣列賦值有兩種方式a[2][3] = ,};b = ,};//a[2][3] = b;c[2][3] = ,};//也可以部分賦值,沒有賦值的部分系統會自動用0補齊
上面這種賦值方式是分行賦值,表示a[0]行。如果使用者沒有宣告二維陣列是幾行幾列,那麼賦值的時候就應該加{},將每一行的元素括起來。a[2][3] = ;
第二種賦值方式是將元素依次賦值給陣列,陣列會根據使用者中的宣告,自動將陣列轉換為2行3列;如果沒有宣告行列的值,就不能使用此種賦值方式,因為編譯器不知道你想要什麼樣的二維陣列。二維陣列的使用。題目:
乙個3*4
的矩陣,要求輸出其中最大值
的元素的值,以及它的行號和列號。
實現步驟:首先用for迴圈將二維陣列中的每乙個元素讀出來,然後元素間進行比較,將大的給a[maxr][maxc];最後在for結束時列印a[maxr][maxc];的數值,並將maxr 和maxc的數值列印出來。
#include int main(); int i,j,maxr,maxc; maxr = maxc = 0; for(i=0; i<3; i++) } printf("max = %d maxr = %d maxc = %d\n",a[maxr][maxc],maxr,maxc);}
這個程式中i代表二維陣列的行,j代表二維陣列的列;因為記憶體陣列是一維的,所以按照行序優先,因此第乙個for迴圈先讀取行,然後進入第二個for迴圈讀取這一行的每一列,當這一列的元素都讀完之後,返回到第乙個for迴圈讀取新的一列,一次迴圈,直到這個二維陣列的最後乙個元素。比如程式執行時,第一次進入外層for迴圈的時候讀取a[0]行,然後進入裡面的for迴圈,讀取a[0]的每一列,a[0][0],a[0][1],a[0][2],a[0][3],然後返回到外層的for迴圈,讀取下一行a[1],接著讀取每一列,依次類推。字元陣列:用來存放字元型陣列的陣列稱為字元陣列。它的定義和一維陣列一樣,區別在於賦值時需要用引號將元素引起來。
char s[5] = ;char t = ;//這兩種賦值方式都可以char r = ;char d = "c.168.12.f";
上面這四種賦值方式都是正確的,字元陣列只有在定義時才能將整個字串一次性地賦值給它,一旦定義之後,就只能乙個字元乙個字元地賦值了。請看下面的例子:char str[5];str = "hi";//錯誤,正確方式如下str[0] = 'h';str[1] = 'i';
在c語言中沒有字串(string)型別,所以如果要定義乙個字串,只能通過字元陣列完成。因為字串是連續的,所以在記憶體中如果要找到乙個字串,除了知道從什麼地方開始,還要知道從什麼地方結束,所以c語言中規定『\0』為字串的結束標誌。所以上述的賦值例子中下char r和char d是字串,因為使用雙引號給字元陣列賦值時,在儲存空間足夠時,結尾會預設加『\0』,因此如果想定義字串時,一定記得給『\0』留乙個位置。
char r = ;char d = "c.168.12.f";char h[4] = "fine";//錯誤,因為fine本身已經有4個字元了,\0就沒有位置了char a[5] = "fine";//正確
但是單引號逐個賦值時並不會預設加『\0』,所以需要在賦值時加上。
char h[5] = ;//這樣才是乙個字串,而不是單個字元char s = ;
字串長度:strlen(計算這個陣列有多少個元素)
在使用字串長度這個函式的時候,它不會統計\0,所以上面這個例子中s這個陣列的字串長度是4。字元陣列的使用:輸入乙個字串,逆序輸出。
#include #include int main();//為了避免初始化時,實際元素個數少於宣告的空間大小 //而輸出亂碼的問題,在宣告時直接全部初始化為0 printf("請輸入乙個字串:"); gets(str); n = strlen(str); for(i=n-1; i>=0; i--) putchar('\n'); return 0;}
輸入字串之後,通過strlen得到字串的長度,然後利用for迴圈完成逆序。逆序過程就是將最後乙個字元和第乙個字元交換,倒數第二個和正數第二個交換。上面這個程式中字串長度為5,但是陣列下標是從0開始,所以需要用字串長度減去一,得到最後乙個字元的下標,這個程式中是a[4],然後將它列印出來,依次類推,下乙個列印a[3],直到將所有字元都列印出來,即i=0時,退出迴圈。 c 二維陣列賦值 C語言學習 陣列
一 陣列的定義 元素 用乙個統一的名字標識這組資料,這個名字稱為資料名,構成資料的每乙個資料項 下標 從0開始的整數,遵循 先定義,後使用 的規則 陣列定義的一般形式 型別陣列名 下標1 下標2 下標n 注意 型別用於宣告陣列的型別,即陣列中元素的型別 陣列名用於標識該陣列 下標的個數表示陣列的維數...
C語言二維陣列
int main int argc,const char argv int array 5 建立乙個二維陣列 型別修飾符陣列名 包含幾個小陣列 每個小陣列有多少個元素 初始值如何寫?int array 3 4 一維陣列可以省略元素個數,二維陣列只能省略第一位 第乙個 3 可以不寫 第二種初始值寫法 ...
C語言 二維陣列
c語言之二維陣列 1 定義的基本格式 int a 1 2 1代表一行,2代表二列 難點 二維陣列的行列下標。字串結束標誌的實用。2 一維陣列和二維陣列的聯絡。一維陣列如同千層面一樣一層一層的,而二維陣列,只是給千層面切了幾刀 3 int a 2 3 a 0 0 是1,a 0 1 是2,a 0 2 是...