1刺啦、數(shù)組類型和多維數(shù)組本質(zhì)
1.1 數(shù)組概念
? ? ? ? 從元素類型的概念渠啤,數(shù)組是相同類型的變量的有序集合态贤。
? ? ? ? 從內(nèi)存的角度:是連續(xù)的一大片空間端辱。
1.2 數(shù)組初始化
數(shù)組元素的個(gè)數(shù)可以顯示或隱式地指定得哆;
分析數(shù)組初始化{0}和memset比較脯颜;
? ? ? ? 指定長度:int a[10] = {1, 2};
? ? ? ? 不指定長度:int b[] = {1, 2};
? ? ? ? 全部置為0初始化:int c[20] = {0}; // 編譯的時(shí)候就已經(jīng)確定所有的值為0.?
????????全部置為0賦值:memset(a, 0, sizeof(a));? 顯式地重置內(nèi)存塊。
數(shù)組名的技術(shù)盲點(diǎn):
1柳恐、對(duì)于一維數(shù)組伐脖,c語言規(guī)定热幔,數(shù)組首元素的地址和數(shù)組地址是兩個(gè)不同的概念。
數(shù)組名(例: a)是數(shù)組首元素的地址(是常量)讼庇,a+1步長為1*sizeof(int)绎巨;對(duì)數(shù)組名取地址,是數(shù)組地址蠕啄,&a+1步長是整個(gè)一維數(shù)組的大小10*sizeof(int)场勤。
2、表達(dá)數(shù)組數(shù)據(jù)類型歼跟?a[10]? ?(c++里和媳,new int[10])
數(shù)據(jù)類型分基礎(chǔ),非基礎(chǔ)兩種哈街。數(shù)組數(shù)據(jù)類型是非基礎(chǔ)數(shù)據(jù)類型留瞳。c語言中的數(shù)組有自己特定的類型,由元素的類型和數(shù)組大小共同決定骚秦。
例如 int array[5] 的類型為 int [5]她倘。確定了一個(gè)連續(xù)的內(nèi)存塊,大小5*4=20個(gè)字節(jié)作箍,分為5個(gè)元素,每個(gè)元素大小4個(gè)字節(jié)胞得,按照int型解釋。
如何定義數(shù)組數(shù)據(jù)類型跃巡?類型的本質(zhì)是固定大小內(nèi)存塊的別名
typedef? int(MYARR)[5][5]? //用括號(hào)括起來。由于括號(hào)和中括號(hào)優(yōu)先級(jí)相同个扰,但結(jié)合方向都是自左向右瓷炮,因此誰寫在左邊誰的“優(yōu)先級(jí)”就高葱色。小括號(hào)中的名字即這種數(shù)組類型的類型名,可以用抽象出的MYARR數(shù)據(jù)類型去定義其他的數(shù)組苍狰。
數(shù)據(jù)類型不分配內(nèi)存空間。只有定義變量時(shí)才分配空間淋昭。
? ? MYARR? array;? ?//相當(dāng)于int? array[5][5];
代碼:
#include <stdio.h>
int main()
{
? ? typedef int (MyArrayType)[5];
? ? MyArrayType array;
? ? int i=0;
? ? for(i=0;i<5;i++)
? ? {
? ? ? ? array[i]=i;
? ? }
? ? for(i=0;i<5;i++)
? ? {
? ? ? ? printf("array[%d]:%d\n", i, array[i]);
? ? }
? ? printf("array:%d, array+1:%d\n", array, array+1); // 數(shù)組首元素地址
? ? printf("&array:%d, &array+1:%d\n", &array, &array+1); // 數(shù)組地址
? ? return 0;
}