黑馬程式設計師 C語言之複雜資料型別

2021-06-21 16:34:21 字數 3059 閱讀 8031

c語言複雜資料型別

------ ios培訓、android培訓、期待與您交流!-------

一、陣列

我們常用的陣列分為一維陣列、二維陣列和字元陣列

1.      陣列的定義

一維陣列定義方式:型別說明符 陣列名[常量表示式(即元素個數)]

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

字元陣列定義方式:char 陣列名[常量表示式]

(1)型別說明符可以是int、float、char等;

(2)陣列名的命名規則和變數名的命名規則一樣;

(3)在定義陣列時,需要指定陣列中元素的個數,方括號中的常量表示式表示元素的個數,常量表示式可以是常量或者符號常量,但不能是變數;

(4)二維陣列名後的第乙個常量表示式通常表示行下標,第二個常量表示式表示列下標;

(5)二維陣列中元素排列的順序是按行存放的,即在記憶體中先順序排放第一行的元素,在存放第二行的元素,依次排放;

(6)陣列名還可以表示陣列在記憶體中的位址;

2.      陣列的引用

c語言規定只能逐個引用陣列元素而不能一次引用整個陣列。

一維陣列的表示方式:陣列名[下標]

二維陣列的表示方式:陣列名[行下標][列下標]

字元陣列的表示方式:陣列名[下標]

3.      陣列的初始化

(1)    在定義陣列時對陣列元素賦值

int a[5]=;

int b[2][3]=,};

char c[4]=;

char d[2][10]=;

(2)    只給一部分元素賦值

int a[5]=;

int b[2][3]=,};

char c[4]=;

注:這樣方法的賦值只是給陣列的前面的資料賦值;

(3)    使陣列所有元素都為0

int a[5]=;

注:a.在對陣列元素賦值時,假如資料的個數已經確定,可以不指定陣列長度;

b.計算陣列的長度可以用: sizeof(陣列名)/sizeof(陣列型別);

c.陣列作為函式引數時,可以省略元素個數,傳遞的是整個陣列的位址,修改函式形引數組元素的值,會影響到外面的是引數組;

4.程式舉例:將乙個二維陣列a的行和列的元素互換,存到另乙個陣列b中。

#include

void  main()

,};int b[3][2];,i,j;

printf(「array a:\n」);

for(i=0;i<=1;i++) ;

b[j][i]=a[i][j]; }

printf(「\n」); }

printf(「array  b:\n」);

for(i=0;i<=2;i++)

} }

二、字串

1.     字串處理函式:

(1)   puts函式 :puts(字元陣列) 將乙個字串輸出到終端上(以』\0』為結束標誌)

(2)   gets函式 :gets(字元陣列)從終端輸入乙個字串到字元陣列

(3)   strcat函式 :strcat(字元陣列1,字元陣列2)將字串2接到字串1的後面

(4)   strcpy和strncpy函式:複製字串

(5)   strcmp函式:strcmp(字串1,字串2) 比較字串1和字串2

(6)   strlen函式:strlen(字串)  函式的值為字串的實際長度(不包括』\0』)

(7)   strlwr函式:strlwr(字串) 將字串中大寫字母轉換成小寫字母

(8)   strupr函式:strupr(字串)將字串中小寫字母轉換成大寫字母

三、指標

1、基本資料型別作為函式引數是程式的值傳遞;

void change(int );                    void  change(int)

int  main()                         int main()

return 0;}

void change(int n)                    void change(int n)

第乙個程式a=90;要想在函式change內部修改a的值,就必須在函式中找到的a位址,將主函式中的change(a)改為change(&a);也可以定義乙個變數接受a的位址,定義格式:變數型別 *變數名  即定義乙個指標變數p,比如:int *p;

int  a; p=&a; *p=10;,這時候就悄悄地改變了a的值。 2、

int main()

3、指向指標的指標

int main()

4、指標的疑問

int main()

cp=ap=bp=8;即任何指標都占用8個位元組的儲存空間。那麼為什麼指標要分型別?

char c=1;

char *p; //如果用int *p,不會報錯,但是取出來的值可能會出錯

p=&c;

printf(「c的值是%d\n」,*p);

因為指標所占用的空間是8個位元組,所以取出來的數也是8個位元組,所以取出以p指向的位址的連續8個位元組,與題中想要輸出來的結果不同,這就會為什麼指標要分型別。

5、指標與字串

int main()

定義字串的兩種型別:

(1)   陣列:char name=」it」;

特點:字串裡邊的字元是可以修改的;

使用場合:字元的內容需要經常修改的

(2)指標:char *name = 「it」;

特點:字串其實是乙個常量,裡面的字元是不能修改;

使用場合:字串的內容不需要修改,且這個字串經常使用

7、指向函式的指標

#include

void test()

int main()

掌握:定義指向函式的指標

double(*p) (double,char *,int);

p=haha;

或者 double (*p)(double,char *,int )=haha;

------ ios培訓、android培訓、期待與您交流!-------

程式設計基礎之 複雜資料型別

8 複雜資料型別 結構型別 在main前面 struct 結構名 宣告結構名變數 struct 結構名 結構變數1 結構變數2,結構變數n 共用體又稱聯合體,第二次賦的值會把前面的覆蓋掉,並不常用。列舉型別 標示符和標示符之間用逗號分隔。指標型別 在c語言中定義了乙個特殊的資料型別 指標型別,指標型...

C語言複雜資料型別

1 結構體 一 結構體的三種定義方式 方式一 結構體標準寫法 struct person struct person personnomal 方式二 struct person myperson 定義結構體的同時,初始化乙個person 結構體 struct person personnomal 定...

黑馬程式設計師 C 資料型別

windows phone 7手機開發 net培訓 期待與您交流!c 程式設計中,大家會經常使用到不同的資料型別,那麼 程式語言到底有什麼型別呢?具體如下 1 值型別 各種值型別總是含有相應該型別的乙個值。c 迫使你初始化變數才能使用它們進行計算 變數沒有初始化不會出問題,因為當你企圖使用它們時,編...