一、指標
指標是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 結構體的特點是 表示更豐...