C基礎語法 三 複雜資料型別(指標)

2021-06-27 17:48:23 字數 2790 閱讀 1474

一、指標

指標是c語言中非常重要的資料型別,如果你說c語言中除了指標,其他你都學的很好,那你乾脆說你沒學過c語言。

1.指標變數的定義

定義的格式:  變數型別 *

變數名; (1

)先定義後賦值

int *p; // 定義指標變數

int a = 9;

p = &a; // 指標變數

p指向了變數a

*p = 10; //訪問

p指向的位址空間

printf("%d\n",a); // 結果為 10

(2)定義的同時賦值

int a = 10;

int *p = &a; 

2.指標變數的作用:

指標變數只能儲存位址,其實指標就乙個作用,能夠根據乙個位址值,訪問對應的儲存空間。

二、指向指標的指標

如下所示:

int a = 10;

int *p = &a;

int **pp = &p; //指向指標p的指標pp

***pp = **pp = *p = a; //無論用哪種方式都能改變a的值

三、指標與陣列

1.指標指向陣列:

int ages[5] = ;

int *p;

p = &ages[0]; 

或:p = ages;

解釋:陣列名就是陣列的位址,也是陣列首元素的位址。

2.陣列元素的訪問方式

(1)陣列名[下標]  --->ages[1]

(2)指標變數名[下標] ---->p[1]

(3)*(p+i)

解釋(3):指標變數的 +1 是多少位元組,取決於指標的型別。

四、指標與字串

字串的定義方式:

(1)陣列字串:

char s = "haha";

特點:字串裡面的字元是可以修改的。

(2)指標指向字串

char *s = "haha"; 或:

char *s;

s = "haha"; 

特點:這裡的字串是常量字串,裡面的字元是不可以修改的;

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

五、返回指標的函式

(只要看懂)

指標也是c語言的一種資料型別,因此乙個函式的返回值肯定可以是指標型別的

返回指標的函式的一般形式:型別名 *函式名(引數列表);

六、指向函式的指標(只要看懂)

定義格式: 函式的返回值型別(*指標變數名)(形參1,形參2,....);

(*z指標變數名) :是固定寫法,代表指標變數p 將來肯定指向的是函式。

為什麼指標可以指向乙個函式:

函式作為一段程式,在記憶體中也要佔據部分儲存空間,它也有乙個起始位址,即函式的入口位址。函式有自己的位址,那就好辦了,我們的指標變數就是用來儲存位址的。因此,可以利用乙個指標指向乙個函式。

注意:函式名就代表著函式的位址。

使用注意:由於這類指標變數儲存的是乙個函式的入口位址,所以對它們進行加減操作是無意義的。

指向函式的指標主要有兩個用途:

1.呼叫函式;

2.將函式作為引數在函式間傳遞。

七、小練習

指標練習: /*

輸入兩個數

列印兩個數的和、差、積、商、以及餘數 */

#include

//宣告

jisuan函式

double

jisuan(

double

a,double

b, *n, *n2, *n3, *n4);

intmain()

double

jisuan(

double

a,double

b, *n, *n2, *n3, *n4)

輸入兩個數:

10 , 5

執行結果:

sum=

15,minus=

5,multiply=

50,divide=

2,yushu=0

指標與陣列:

/* 有乙個陣列int a[nsize],

要求寫乙個函式:

int *myfunc(int *p,int nsize); 將a

中的都移到陣列末尾,將非的移至開始(保持原來的順序不變) */

#include

//函式的宣告

int*myfunc(

int*p,

intnsize);

intmain() ;

intb[5] = myfunc(a[5],5);

for(

inti = 0;i < 5;i++)

return0;

} //定義函式

int*myfunc(

int*p,

intnsize)

*(p+j) = temp;

j--; }

}returnp;

}

執行結果:3 2 1 0 0

指標與字串:

#include

intmain()

執行結果為:r         

rose



複雜資料型別 指標

指標是c語言的精髓,不會指標就意味你沒有學過c語言。1 指標的基本使用 格式 變數型別 變數名 指標變數只能儲存位址,能夠根據乙個位址值,訪問對應的儲存空間 指標變數前面的int double char等型別,代表它只能訪問此種型別的變數。include int main void change i...

C複雜資料型別

結構體 1 表示更豐富的複雜型別 以後類這個概念的 2 內部屬性定義的順序 不影響使用,但是會影響記憶體分配 3 關鍵知識點在於記憶體大小的對齊問題。structstudent 聯合體 1 同乙個記憶體區域可以存放不同資料型別 非常少見 2 內部屬性的定義不影響使用也不影響記憶體分配 3 操作了乙個...

複雜資料型別

1 在c語言中,除了之前學到的基本資料型別 整型,浮點型,字元型 外,還有指標型別和構造型別 結構型,聯合型,列舉型 2 結構體型別,用於把不同型別的資料組合成乙個集合體,宣告格式 struct 結構名 例如 includestruct students void main 結構體的特點是 表示更豐...