1、指針是什麼?
2、位址是什麼?
3、指針常量與常量指針
1、指針是什麼?
指針是一個特殊的變量,特殊就特殊在他的内容是一個位址。
就像一個訓示牌,指向一塊地方,你想要的東西就在這塊地方,你所處的地方是訓示牌的地方(指針變量本身的位址)。
2、位址是什麼?
位址就是處理器為記憶體編的序号,這裡的記憶體是指各種處理器可以通路的裝置,比如寄存器,接口,RAM,ROM,處理器要通路這些裝置,就要将位址寫到位址總線,控制器會将位址總線對應的地方接到資料總線,這時,處理器就可以往這個位址的存儲單元讀/寫資料,總的來說,位址就是對應的編号,具體多少,有CPU平台決定。
3、指針常量與常量指針
下面說指針常量和指針變量,還有常量指針,這是指針與變量裡最重要的一個概念。
指針變量:它可以指向别的位址,也可以改變目前指向位址裡的值。
int x=;
int *ptr=&x;//ptr是一個指針變量
指針常量:它不可以通過自身改變指向的變量,但是可以改變指向的位址
const int* ptr=&x;
ptr=&y;//right
*ptr=//error
常量指針:它可以通過自身改變指向的變量的值,但不能再指向别的位址了,是以定義時要初始化
int * const ptr=&x;
ptr=&y;//error
*ptr=//right
指向常量的指針:這裡有一個問題,A是一個常量,B作為指針,指向A,那麼B應該是一個常量指針還是一個變量指針呢?
#include<stdio.h>
int main(void){
const int A=;
//int *B=&A;//error//可以指向一個變量,那麼可以指向一個常量嗎
//invalid conversion from **`const int*' to `int*'**
const int *B=&A;//指向一個常量是以要指向一個常量必須是指針常量
printf("A is %d\n",A);
printf("B is %d\n",*B);
}