回覆列表
  • 1 # 使用者5588151042485

    隨著你程式的深入,你會接觸到資料結構、編譯原理、演算法、以及嵌入式的開發,這些都需要指標的應用,不要覺得指標很難學,多熟悉它就很快帶來好處了,廢話少說,我們來講解基本的C指標語法。下面我們初步認識一下指標#include "stdio.h"int main(){ int easy; int *easy_p; easy = 5; /******輸出變數easy的地址*******/ printf("&easy address=0x%p \n",&easy); printf("&easy_p address=0x%p\n",&easy_p); /*將easy的地址賦值給easy_p*/ easy_p=&easy; printf("easy_p=%p \n",easy_p); /**透過easy_p輸出easy中的內容*/ printf("*easy_p=%d \n",*easy_p); /*透過easy_p修改easy中的內容*/ *easy_p=10; printf("easy_p=%d \n",*easy_p); return 0;}上面的例子我們看到:1、easy的變數的地址是0x0018FF44(這個根據不同的機器得到的結果不同)。2、easy_p是一個指標變數,注意我這裡將這個指標變數取地址,輸出其地址,這麼做的意義就是想告訴,指標變數也是一種資料型別,在計算機中也要分配地址空間。而我的計算機將easy_p指標變數分配到0x0018FF40處.。3、接下來我做得是將easy變數的地址賦值給了easy_p,然後輸出了easy_p(注意我沒有在easy_p前面加“ * ”),輸出的結果是easy變數的地址,就如上面你給easy變數賦一個5值,直接輸出easy結果是5一個道理。4、輸出*easy_p可以看到結果為5。到這裡,你應該明白教科書中對*easy_p和easy_p不同的叫法的區別了。加一個“ * ”來取0x0018FF40中的數值(準確的應該叫地址)所指向的值。幾乎所有的處理程式中,所謂的“指標型別的數值”,實際上是指記憶體地址。有了上面這句話,那麼我們可以提出一個問題:指標就是地址,那麼指向double的指標和指向int型別的指標應該沒什麼區別吧。這麼認為是不對的,它們之間有區別。看上面例子中的第二步,指標變數也是一個有記憶體存放的變數,這個變數裡面存放的是指向double型別的地址,還是指向int型別的地址,這是需要你先宣告。我們都知道double在記憶體中佔8個位元組,而int型別佔4個位元組。通俗的將就是我們定義不同的指標型別,他們的定址能力不一樣,int *能定址4個位元組,double *能定址8個位元組,如果你定義的是一個結構體,如果結構體如下:typedef struct example{ int a; double b; char c;}EXAMPLE;如果你定義一個EXAMPLE *test;那麼EXAMPLE *這個指標結構的定址能力就是整個結構體共13個位元組(其實並不是13個位元組)。明白這一點,你就可以理解VC程式設計中的控制代碼的概念,以及C++類定義成指標為什麼能找到自己的內部成員。希望你能明白這一點。先講這麼多

  • 中秋節和大豐收的關聯?
  • 2019新春賀歲片那麼多,哪部最值得一看?