數組與指針(1)

數組與指針

指針也是一種變量,表明着指向一個地址數組

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

指針的賦值

通常狀況下指針會用一個有意義的地址來賦值(&表明取地址)spa

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

上面的數組a能夠賦值給pa是由於數組名字就表明了數組的首地址指針

解引用

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

舉個例子:blog

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

因爲pans指向的是ans的地址,咱們對*pans賦值操做,ans也會被改變內存

再來一個例子:it

咱們知道一個 int 的佔用空間是32bit 一個char佔用空間的大小8bitclass

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

相關文章
相關標籤/搜索