不同型別的指標的區分與應用

2021-07-10 15:03:22 字數 1761 閱讀 8101

(個人總結,如有不正確的地方,望指正)

[儲存型別] 資料型別 *指標變數名 [=初始值];如int*p=null;

指標型別 int* ;       基(礎)型別int;  指標指向的地方就是指標變數的值&x;位址型別void *

注意:任何指標變數被建立時不會自動成為null指標,它的預設值是隨機的,它會亂指一氣。因此如果在短期不用的話,就先把指標賦值為null。

十進位制printf(「%lu」,p);   十六進製制printf(「%p」,p);或printf(「%x」,p);

int i;                             i是整型。

int *i;                           i是整型指標。

int **i;                        i是整型指標的指標。

int *i[5];                      i是含有5個元素的整形指標陣列。

int (*i)[5];          i是指向5個元素的指標。

int *i();                        i是返回值為整型指標的函式。指標函式

int(*i)();                      i是返回整型的函式指標。函式指標

int *(*i)();          i是函式指標,函式返回整型指標。

int *(*i)();                i是函式指標陣列,函式返回整型指標。

int *((*i)())[5]             i是函式指標,函式返回指向5個整型指標原則的指標。

1、  將指標指到陣列末尾 dowhile(*s);

2、  陣列名是指標常量,它不能指向其他位址;同int* const s。

指向常量字串的字元指標,不能改變字串中的字元;這一點有點像常量指標。

3、  行指標:str+1、pt等;列指標str[0]、p等

二維陣列嚴格意義上還是一維陣列。對於intstr[2][3],*p=str,(*pt)[3];列指標p是一維的(p把str當一維陣列處理);行指標是二維的(pt把str當二維陣列處理);陣列名str把自己當作二維陣列處理。,**str、*p、**pt表示陣列元素str[0][0]。

如果把火車和座位看成位址,座位上的人是元素。那麼二維降維後的一維,如同火車頭和火車的第乙個座位,都代表位址。即str,str[0],pt[0],pt都代表str的首位址&a[0][0]。

p+i*3+j、*(pt+i)+j代表str[i][j]的位址。

可以看出str和pt基本相同。

4、  指向指標的指標可以通過指標陣列來間接的控制二維陣列,但一維和二維處的位址是不同的。

演示:

#include "stdio.h"

void main()

,(*pt)[3]=a,*t[2]=,**pp=t;

printf("a[0]=%p,pt=%p,pt[0]=%p\n",a[0],pt,pt[0]);

printf("%p%p %d\n",pp,*pp,**pp);

}

「傳值不變,傳址變。」在有指標的**中就不適用了。應該從實參形參和指標的指向進行分析。

演示:

#include "stdio.h"

void fun(int *a,int *b)

void main()

不同型別的檔案

cpp檔案 cpp是用c 語言編寫的源 檔案的字尾 具體實現 h檔案 h是c語言和c 語言的標頭檔案 函式宣告,巨集定義,函式原型 pde檔案 一共有4種可能,分別為 1 powerdesk encrypted file 2 pathology data exchange file 3 afp pa...

C 不同型別指標的相互轉化

寫c已經有一段時間了,今天聽到有人說c的不同指標型別不能相互轉化!我不相信,但畢竟對方資歷比我深,慎重起見,只是笑過。但一直想著這個問題,於是剛才寫了乙個簡單的demo,測試了c指標的效能!年輕就是要敢於質疑!我還記得之前看過windows程式設計時,很多函式使用了類似 以下的寫法,所以才確信自己的...

C 不同型別的畫筆!

畫筆是可以與graphics物件一起用來建立實心形狀和呈現文字的物件。1.solidbrush 畫筆最簡單形式,用純色進行繪製。2.hatchbrush 類似與 1 但它可以選擇大量預設圖案,而不是純色。要命名空間 using system.drawing.drawing2d 3.texturebr...