指標的概念
什麼是指標?如果用一句話概括的的話那就是,乙個存放記憶體空間位址的變數。
指標也是乙個變數,指標存放的內容是乙個位址,該位址指向乙個記憶體空間。
指標變數的定義
int*p;//該變數用來存放乙個空間的位址。
*p代表該指標指所指向記憶體空間中的值,
切記指標只能存放有效的記憶體空間位址,不能存放其他資料。
int*p=0x12ab34f0;
inta=100;
int*p;
p=&a;//&用來取變數的位址(也叫引用reference)
printf("&a=p指標的相容性p=%p",&a,p);//輸出結果&a=
0028fea8p=
0028fea8
指標之間的賦值,比普通型別之間的賦值更為嚴格,比如不能將乙個char型別的指標指向乙個int型的變數
inta=0x12345678;
char*p=&a;
printf("p這裡需要解釋下為什麼char的值是78=%x\n",*p);//輸出結果p=
78
乙個int占用4個位元組的空間,而乙個char占用乙個位元組的空間
所以如果把乙個char的指標指向乙個int型的空間位址的話,也只能取到乙個int的四分之一空間,因為是小端對齊所以取到的值為78
常量指標和指標常量
/*
*常量指標可以改變指向空間的位址但不可以改變指向位址空間的值
*/
voidconst_point()
/*
*指標常量可以改變指向位址空間的值但不可以改變指向空間的位址
*/
void陣列指標和指標陣列point_const()
陣列指標:a pointer to an array,即指向陣列的指標,本質是指標
int(*p)[4];//定義乙個陣列指標
printf("sizeof(p)=%d\n",sizeof(p));//輸出結果
sizeof(p)
=4,32位系統下,指標的大小都是4個位元組,不管是什麼型別的指標,指標只存放空間的位址
//列印p的位址,跟p+1後的位址
printf("p=%pp+1=%p\n",p,p+1);
//輸出結果p=
00000000p+1
=00000010
p+1後的位址比原先的位址多了16個位元組,陣列int[4]的大小
//定義乙個二維陣列
inta[3][4]=;
//定義乙個陣列指標指向乙個二維陣列
int(*pp)[3]=(int(*)[3])a;
//通過陣列指標運算元組
inti,j;
for(i=0;i
putchar(10);
}
輸出結果
指標陣列
:array of pointers,即用於儲存指標的陣列,也就是陣列元素都是指標,本質是陣列
//定義乙個指標陣列
char
for(inti=0;i
//使用二級指標操作指標陣列
char**p=pa;
//pa
=*pa[0]
char*pa=
char**
for(inti=0;i
while(*p)
C語言之指標
指標型別的本質分析 1 指標的本質 指標的本質 一種復合的資料型別。下面我將以下面幾個作為例子進行展開分析 a int p b int p c int parvalue 3 d int pfun 分析 所謂的資料型別就是具有某種資料特徵的東東,比如資料型別char,它的資料特徵就是它所佔據的記憶體為...
C語言之指標
指標是c語言學習乙個重要的概念,它極大的方便了c語言程式設計,用好了指標可以幫助我們程式設計,但是同時指標也是飽受爭議,因為指標的使用很容易出錯,所以在一開始學的時候就弄懂有關指標的知識點是必要的。那麼指標是什麼呢?其實指標也是一種變數,和其他型別的變數一樣,也是儲存資料的,只是在指標變數裡面儲存的...
C語言之指標
記憶體單元的編號也叫做位址。既然根據記憶體單元的編號或者位址就可以找到所需的記憶體單元,所以通常把這個位址稱為指標。在c語言中,允許用乙個變數來存放指標,這種變數稱為指標變數,因此,乙個指標變數的值就是某個記憶體單元的位址或稱為某記憶體單元的指標。型別說明符 變數名 例 int p2 float p...