指標有&和*操作,前者是取位址,後者是找到位址然後讀取它裡面的值。如int p=&temp,此時你可以把p看作乙個存放位址的四位元組的容器,故*p,是首先找到p裡面的內容,現在裡面存放的是temp的位址,然後*,跳轉到temp的位址,然後取出裡面的內容。(注意指標自身也是乙個變數也要占用系統記憶體,所以他自身也有乙個位址,如&p就是他自身的位址,這裡0x0007ccf0為它自身的位址,而0x0007cfe0是它裡面的內容)
這裡說明了&與*是一對互逆符號,如果+ -一樣,所以*&p依然是&temp
int temp = 2;
int *p = &temp;
printf("temp address:%p,*&p=%p",&temp, *&p);
結果如下:
指標的本質是存放乙個位址,當然指標也有型別如int,double,float,其主要作用的找到位址後,以什麼方式讀取和以讀取多大的長度,如int p=&temp,*p就是找到temp的位址然後以int型別的方式向後讀取四個位元組,浮點數亦是如此。(注意這裡的指標不會隨著型別的改變,長度有所改變,在32位指標長四位元組,64位指標長8位元組)
我們用乙個例項來看下指標的實質:
int tempa = 12;
int*p = &tempa, **pp = &p, ***ppp = &pp;//
printf("tempa address:%p\n p address:%p\n pp address:%p\n ppp address:%p\n", &tempa,&p,&pp,&ppp);
printf("p address:%p\n", p);//由此可以看到&tempa=p,然後加上*,temp=*p;
printf("pp address:%p\n", pp);//pp=&p,*pp=p,**p=temp 這裡相當於數學上的乘除法,&和*相互抵消,
執行結果如下:(最後的ppp address:12請忽略)
首先看下tempa變數的位址,與裡面存放的內容(這裡使用的工具是vistual studio 2017)
然後看下p指標的位址與內容
最後:因為本人水平有限,所以如有錯誤還望予以指正!!
C語言指標
指標變數是包含記憶體位址的變數,它指向記憶體中的一塊區域,通過指標的值,可以間接訪問到相應的記憶體單元的資料,並做相應的修改。1 指標的定義和簡單使用 定義乙個指標變數和定義一般的變數類似,只需在變數名前面加乙個 對乙個指標變數賦值可以用取位址符 來獲取到乙個變數的位址,如果要獲得指標指向的記憶體區...
C語言指標
1 定義指標變數void change int n 格式 變數型別 變數名 定義了乙個指標變數p 指標變數只能儲存位址 指標變數p前面的int 指標變數p只能指向int型別的資料 int main void change int n 2 指標與陣列 陣列名其實質是乙個指標,但是它和普通的指標變數還是...
c語言指標
編寫程式,在主函式裡用指標陣列輸入六個字串,再用另乙個函式對這六個字串排序,並在主函式中輸出排好序的字串。include void sort char s,int n char temp for int i 0 ifor int j 0 jif strcmp s j s j 1 0 temp s j...