C語言基礎知識整理8陣列

2021-09-10 19:41:23 字數 3662 閱讀 2478

一批具有同名的同屬性的資料就組成乙個陣列(array),陣列右下角的數字稱為下標。

陣列是一組有序資料的集合,下標代表資料在陣列中的序號;

用乙個陣列名(如s)和下標來唯一地確定陣列中地元素;

陣列中地每乙個元素都屬於同乙個資料型別。

c語言規定用方括號中的數字來表示下標。

陣列名作實參,傳遞的是陣列首位址,實參形參共用一段位址單元

定義:型別符 陣列名[常量表示式];

//陣列名命名規則遵循識別符號命名規則。

//定義陣列時,需要指定陣列元素個數,方括號中常量表示式用來表示元素個數(陣列長度)

//常量表示式可包括常量和符號變數,不能包含變數

//c語言不允許對陣列的大小作動態定義,即陣列的大小不依賴於程式執行過程中變數的值。

//主函式中陣列大小是確定的,不允許動態定義,可在被呼叫函式中動態定義。如下:

可變長陣列定義:

void func(int n)

//允許在呼叫時,n有不同值。但是在執行函式時,n的值是不變的,陣列長度是固定的。

//如果指定陣列為靜態儲存方式,則不能用「可變長陣列」

引用:陣列名[下標];//只能引用陣列元素而不能一次整體呼叫整個陣列全部元素的值

引用陣列元素

1.下標法:陣列名[下標] //下標可以是整型常量或整型表示式。

//陣列下標從0開始     c語言中陣列名(不包括形參陣列名)代表陣列首元素。

2.指標法:通過指標找到該元素,可以使目標程式的**質量更高。佔記憶體少,執行快。

陣列初始化://陣列元素中各元素的初值順序放在一對花括號內,資料間用逗號分隔。

//花括號內的資料就稱為「初始化列表」

在定義陣列時若對全部陣列元素賦初值,可不寫陣列長度。

int a=;

也可只給陣列中部分元素賦值,此時未賦值元素整型為0,字元型為『\0』,指標型為null

定義:型別說明符 陣列名[常量表示式][常量表示式];

//二維陣列常稱為「矩陣」(陣列的陣列),常寫成行和列的排列形式。

//用矩陣形式表示二維陣列,是邏輯上的概念,能形象表示行列關係;

//在記憶體中,各元素是連續存放的,不是二維的,是線性的。

//c對二維陣列如此定義,因此其可看作特殊的一維陣列:其元素為乙個一維陣列

如:int a[3][4],可以看作一維陣列,有三個元素a[0],a[1],a[2]

每個元素又是乙個包含4個元素得到一維陣列:

a[0]---a[0][0] a[0][1] a[0][2] a[0][3]

a[1]---a[1][0] a[1][1] a[1][2] a[1][3]       

a[2]---a[2][0] a[2][1] a[2][2] a[2][3]

可以把a[0],a[1],a[2]看作是3個一維陣列的名字。

上面的二維陣列可以理解為定義了3個一位陣列,即相當於int a[0][4],a[1][4],a[2][4];

此處把a[0],a[1],a[2]看作一維陣列名。

此處理方法可使得陣列初始化和用指標表示時很方便。

c中陣列元素按行存放。

//c允許使用多維陣列

//多維陣列在記憶體中排序順序為,第一維下標變化最慢,最右邊下標變化最快。

引用:陣列名[下標][下標];//下標不可超過範圍,行、列序號均從0起算

初始化:

分行給二維陣列賦初值 //直觀,第n個花括號對應第n行,即按行賦初值

int a[3][4]=,,};

可以將所有資料寫在乙個花括號內,將陣列元素在記憶體中的排列順序對各元素賦初值。

int a[3][4]=;//建議使用上一種方法。

也可以部分賦值:int a[3][4]=,,}; 或int a[3][4]=,,};

也可對某幾行元素賦初值:int a[3][4]=,}; 或 int a[3][4]=,{},};

若對全部元素賦初值,則定義時對第一維的長度可以不指定,但是第二維長度不能省!

int a[4]=;等價於int a[3][4]=;

也可以只對部分賦初值省略第一維長度,但應分行賦初值。

int a[4]=,{},};

型別符 陣列名[常量表示式]···[常量表示式]     多維陣列

//字元型資料是以字元的ascii**儲存在儲存單元中的,一般佔乙個位元組。

//由於ascii**也屬於整數形式,因此在c99標準中,把字元型別歸納為整型型別中的一種。

//c語言中沒有字串型別,字串是存放在字元型陣列中的。

定義:char c[10];//用來存放字元資料的陣列是字元陣列。字元陣列中的乙個元素存放乙個字元。

//由於字元型資料是以整數形式存放的,因此也可以用整型陣列存放,但浪費空間。

int c[10]; c[0]=』a』;

初始化:

char c[10]=;

//初始化列表,把各個字元依次賦給陣列各元素。

//若不進行初始化,則陣列元素不可預計。若提供初值個數大於陣列長度,出現語法錯誤。

//若提供的初值個數與預定陣列長度相同,在定義時可以省略陣列長度,系統會自動確定陣列長度。

char c=;//系統自動定義長度為10

//在賦初值的字元個數較多時較方便。

//也可以用字串常量來使字元陣列初始化:

//花括號可以省略  

//也可以定義和初始化乙個二維字元陣列。

如:char c[5][5]=,,,};

字串和字串結束標記:c將字串當作字元陣列處理。』\0』代表ascii碼為0的字元(空操作符)。

//在遇到字元』\0』時,表示字串結束,將其前面的字元組成乙個字串。

//字串結束標記』\0』。c系統在用字元陣列儲存字串常量時會自動加乙個』\0』作為結束符。

如」c program」共有9個字元,在陣列中佔10個位元組,最後乙個位元組』\0』由系統自動加上。

//在程式中往往依靠檢測』\0』的位置來判定字串是否結束,而非根據陣列長度來決定字串長度。

//在printf(「****\n」);語句中自動在其最後加』\0』,每輸出乙個字元檢查一次,看是否遇到』\0』,遇到就停止。

//字元陣列並不要求他的最後乙個字元為』\0』,甚至可以不包含』\0』。是否加,完全根據需要決定。為了使使用方法一致,便於測定字串的實際長度,以及在程式中做相應處理,在字元陣列中也常常人為增加'\0'。這樣做,便於引用字元陣列中的字串。

字元陣列的輸入輸出:

字元陣列的輸入輸出可以有兩種方法:

逐個字元輸入輸出。用格式符「%c」輸入或輸出乙個字元。

將整個字串一次輸入或輸出。用「%s」格式符,意為對字串string的輸入輸出。

//輸出字元中不包括結束符』\0』

//用%s輸出字串時,printf函式中的輸出項是字元陣列名,而不是陣列元素名。執行過程是按字元陣列名c找到起始位址,然後組個輸出,直到遇』\0』為止。

//若陣列長度大於字串實際長度,也只輸出到遇到』\0』結束。

//如果乙個字元陣列中包含乙個以上』\0』,則遇到第乙個』\0』時輸出就結束。

//可以用scanf輸入乙個字串。輸入字串長度應短於已定義字元陣列長度。

//若利用乙個scanf函式輸入多個字串,則應在輸入時以空格分隔。

//scanf函式輸入項若是字元陣列名,不要加位址符&,因為c

中陣列名代表該陣列起始位址。

//可以用printf(「%o」,c);輸出陣列c的八進位制起始位址

C語言基礎知識整理

一 關於sizeof和strlen。sizeof 用於計算某型別或者某變數在記憶體中所佔空間。比如整數分為short型,int型,long整型,分別佔2,2 4,4個位元組,int型具體占用幾個位元組和編譯系統有關。我們輸入字串時通常用char陣列 char s 10 scanf s s 輸入的字串...

c語言基礎知識整理

1 sizeof表示獲取乙個變數或一種資料型別佔幾個位元組 2 d表十進位制有符號整數 3 表示賦值,不表示相等 表示相等 4 變數 char字元型別變數short短整型 int整型long長整型 long long長長整型 float單精度浮點數 4個位元組 double雙精度浮點數 8個位元組 ...

C 面試基礎知識整理(8)

元件描述 容器 containers 容器是用來管理某一類物件的集合。c 提供了各種不同型別的容器,比如 deque list vector map 等。演算法 algorithms 演算法作用於容器。它們提供了執行各種操作的方式,包括對容器內容執行初始化 排序 搜尋和轉換等操作。迭代器 itera...