當前位置:編程學習大全網 - 編程語言 - c語言全面解析十個知識點大學生謹記

c語言全面解析十個知識點大學生謹記

C語言10個小知識了解指針

1.若有代碼

int a=10,*p;p是指針:也是壹個變量,且是壹個只能用來存放地址的變量。

2.若有代碼int a=10,*p;p=&a;當執行了上面的代碼,會說”p指向了a”,其實就是p指針變量存放了a的地址”

3.兩個*的區別,有如下代碼:

inta=10,*p;//該處的* 說明p是壹個指針變量用來存放地址p=&a;

*p=*p+1;//該處的* 表示p所指的變量中的值即a的值10

總結: 變量定義時的* 說明該變量是壹個指針,調用語句中的* 表示指針指向的變量中的值。[此處是比較容易混淆的]

4.int a=10,*p;p=&a;

則:*p=*p+1;//等價:*p +=1; (0)十十

++(*p);

表示的內容相同,都是p所指變量的值+1。

5. *p++和(*p)++的區別是:

等價於* (p++),先獲取 p 當前所指元素的值,然後p指針+1(p指針向後移動壹個單元,壹般用在數組中,普通變量會越界);後者僅僅是p所指變量的值+1。

6.定義變量時

壹個*說明該變量是指針,兩個*說明該變量是指向指針的指針(存放的是指針變量的地址)

int a=10,*p,**q;p=&a;//p指向a,*p的結果是10q=&p;//g 指向p,*q的結果是p的地址值,**q的結果才是10

7,如果調用函數傳遞的是地址,那麽被調函數中形參就需要使用指針接收,在函數中對指針所指變量值的改變,會影響到調用函數中的變量值。執行結果:如圖所示

8.壹維數組名和指針的區別,有定義:

int a[10l,*p;

p=a;//合法

因為,壹維數組名存的是數組首地址,這樣使 p指向了a首地址,也就是第壹個元素的地址。a++;/ /不合法

因為a是壹個地址常量,開辟了就不能再修改了,壹切給數組名字賦值的操作都是非法的。

p++://合法因為p是壹個指針,p++表示從當前向後移動了壹個位置。

對幹上面的定義,a[i]、* (ati)、* (p+i)、p[]都是合法,都是取下標為i的元素值。所以: p++; 是使指針向後移動,(*p) +十是當前所指變量的值內容+1.

9,若有定義:

int a[3][22],*p[3l,iJ;

*p[3]中[優先級[高於*,說明p是壹個數組名,前面的*說明該數組中每個元素都用來存放指針,這叫指針數組。

如果p和a產生聯系,則只能通過逐個賦值的方式完成,即: for(i=0;i<3;i++)p[] =a[l; //合法

因為a[] 是二維數組中每行的首地址,所以可以存放到p數組中。

但是 p=a;是非法的,因為a是地址,p是數組的名字,並不是指針名下面獲取數組元素的方式都是合法的:

*(pl[il+j) *(*(p+i)+j) (*(p+i))lj]

10.若自定義函數的實參是壹維數組名,則該函數的首部可以寫成:?

fun (int al) fun (int a[M]) fun

(int*a) M表示長度若有自定義函數的實參是二維數組名,則該函數的首部可以寫成: fun(int (a)[N])fun(int al[N]) fun(int a[M][N]) M表示行數,N表示列數

若有指針數組作為fun函數的實參,則該函數的首部可以寫成:

fun(int *a[M]) fun(int *al) fun(int**a)

  • 上一篇:labview的應用
  • 下一篇:飛行實例編程
  • copyright 2024編程學習大全網