數組與指針(1)


數組與指針

指針也是一種變量,代表着指向一個地址

指針變量里面存的值是一個數字,數字是幾就代表指向內存的哪里

指針的賦值

一般情況下指針會用一個有意義的地址來賦值(&代表取地址)

int a[10];
int v;
int *pa=a;
int *pv=&v;

上面的數組a可以賦值給pa是因為數組名字就代表了數組的首地址

解引用

解引用就是代表獲得這個地址指向那塊內存的值,這個值如何解釋由這個指針的類型決定

舉個例子:

int ans=4;
int *pans=&ans;
*pans=5;
printf("%d\n",ans);

由於pans指向的是ans的地址,我們對*pans賦值操作,ans也會被改變

再來一個例子:

我們知道一個 int 的占用空間是32bit 一個char占用空間的大小8bit

char a[4]={1,2,3,4};
int *p=a;
printf("*p:0x%x\n",*p);

%x代表16進制輸出的,可以看到我們定義的char數組按照 int類型解釋了

我們對*p操作也將會影響到char數組

還有一種解引用就是結構體指針可以使用->操作

簡單的應用

函數傳參:

我們在函數傳參數的時候,如果我們想在函數體內改變一個外部變量,通常情況下需要傳遞這個指針

在傳遞數組的時候,我們通常是傳遞這個數組的首地址,而不是這個數組的拷貝

我們在遍歷數組的時候可以使用指針,更高效的操作

int a[10];
int *pa=a;
int *ped=pa+10;
while(pa<=ped)
{
    //do something
    pa++;
}

還有一點需要注意的就是,指針做加減運算的時候每次偏移量是sizeof(type)

數組和指針的區別

數組名字代表首地址,我們在使用數組的元素的時候a[i],相當於*(a+i)

我們在使用數組的時候甚至可以這樣:

int a[10];
4[a]=5;//等效a[4]=5;

不過最好不要這樣做,容易引起別人的困惑

但是數組名是不可以被賦值,不能使用自增自減操作

我們對數組進行sizeof操作時候,得到的是數組的實際大小,對指針操作時,只能得到指針長度大小

int a[10];
sizeof(a);
int *pa=a;
sizeof(pa);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM