天天看點

C語言指針-----指針與變量

1、指針是什麼?

2、位址是什麼?

3、指針常量與常量指針

1、指針是什麼?

指針是一個特殊的變量,特殊就特殊在他的内容是一個位址。

就像一個訓示牌,指向一塊地方,你想要的東西就在這塊地方,你所處的地方是訓示牌的地方(指針變量本身的位址)。

2、位址是什麼?

位址就是處理器為記憶體編的序号,這裡的記憶體是指各種處理器可以通路的裝置,比如寄存器,接口,RAM,ROM,處理器要通路這些裝置,就要将位址寫到位址總線,控制器會将位址總線對應的地方接到資料總線,這時,處理器就可以往這個位址的存儲單元讀/寫資料,總的來說,位址就是對應的編号,具體多少,有CPU平台決定。

C語言指針-----指針與變量

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);
}
           

繼續閱讀