指標了解一下

2021-08-19 21:30:23 字數 2048 閱讀 8581

在c語言中,我們會頻繁的使用指標,那麼什麼是指標?首先我們來看一段**。

#include 

int main()

假如建立的變數a的位址為0x0000ff11,那麼指標變數指向變數a,存放的是變數a的位址。

總結:指標就是位址,指標變數是變數,指標變數是用來儲存位址的變數。存放在指標變數中的值都會被當做位址來處理。在32位機器上指標變數的大小為4個位元組,在64位機器上指標變數的大小為8個位元組。

指標變數也是變數,那麼就可以像建立整型陣列一樣,建立乙個指標組。首先指標陣列是陣列,在這個陣列內的元素的型別為指標。如下所示定義了乙個陣列p,p的元素型別為int *,即該陣列的每個元素為指向整型的指標。

int

*p[10];

int (*p)[10];
()的優先順序比高,因此p先與*結合,p為乙個指標,指向的是乙個包含10個整型變數的陣列,所以p是乙個指向陣列的指標,叫陣列指標。那麼陣列的位址如何存放?

int arr[10] = ;

int*p1 = &arr;

int (*p2)[10] = &arr;

int (*p3)[10] = arr;

&arr表示整個陣列的位址,arr表示陣列首元素的位址。顯然,p1為整型指標,p2、p3為陣列指標。在c語言中,「=」兩邊的型別必須相同。

p1左邊是整型指標,右邊是指向陣列的指標,兩邊的型別不同,變數p1不能用來存放陣列的位址。

p2兩邊都是指向陣列的指標,可以用來存放陣列的指標。

p3左邊為指向陣列的指標,右邊為指向陣列首元素的指標,兩邊型別不同。

因此p2用來存放陣列的位址比較合適。

函式指標,從字面意思理解就是乙個指標,這個指標指向的是乙個函式。先來看一段**。

#include 

void test()

int main()

函式名代表位址,和&函式名相同,函式名具有唯讀屬性。那麼函式的位址怎麼儲存?

char *(*pfun1)(char *p1,char *p2);

char **pfun2(char *p1,char *p2);

char *pfun3(char *p1,char *p2);

顯然,pfun3是函式名,該函式有兩個char *型別的引數p1和p2,返回值為char *型別。

pfun2這個表示式與pfun3表示式很相似,唯一不同的是pfun2的返回值為char**型別。

在這裡pfun1不是函式名,它是乙個指標變數,指向的是乙個函式,該函式的返回值為char *型別,函式有兩個引數p1和p2其型別為char*。

(*(void(*)())0)();

void (*signal(int,void(*)(int)))(int);

**1:void(*)()為函式指標型別,(void(*)())0將0強轉為函式指標,*(void(*)())0對函式指標解引用得到函式,(*(void(*)())0)()呼叫該函式。因此,**1實現的是函式呼叫。

**2:首先signal為函式;函式的引數有兩個,第乙個是int型別,第二個是函式指標,該函式指標指向的函式有乙個整型引數,返回型別為void;signal函式的返回型別為函式指標,該指標指向的函式有乙個int型別的引數,返回值為void。

**2太過複雜,不便於閱讀,我們可以對其進行簡化。我們可以將重複使用的void(*)(int)函式指標型別重定義,這樣可以使**更易閱讀。

typedef void (*pfun_t)(int);

pfun_t signal(int,pfun_t);

指向函式指標陣列的指標是乙個指標,該指標指向的是乙個陣列,這個陣列的元素型別為函式指標。這個知識點我們平時不太用,只要了解、認識即可。

void test(int x)

int main()

c語言 初步了解一下指標

指標的基本概念 在計算機中,所有的資料都是存放在儲存器中的.一般把儲存器中的乙個位元組稱為乙個記憶體單元,不同的資料型別所占用的記憶體單元數不等,如整形量佔2個單元,字元量佔1個單元等。為了正確地訪問這些記憶體單元,必須為每個記憶體單元編上號。根據乙個記憶體單元的編號即可準確地找到該記憶體單元。記憶...

了解一下NTLM

ntlm 在客戶機與伺服器之間提供身份認證的安全包。ntlm 身份驗證協議 是 質詢 應答身份驗證協議,是windows nt 4.0 及其早期版本中用於網路身份驗證的預設協議。windows 2000 中仍然支援該協議,但它不再是預設的。ntlm身份驗證過程 ntlm 是用於 windows nt...

了解一下 display flex

一 display flex flex 是flexuble box的縮寫,意為 彈性盒子 用來為盒狀模型提供最大的靈活性.任何乙個容器都可以指定為flex布局.box 行內元素也可以使用flex布局.box webkit核心的瀏覽器,必須加上 webkit box 注意為父級設計flex布局以後,子...