在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布局以後,子...