總結C語言指標部分的知識

2021-08-05 18:28:33 字數 3250 閱讀 9176

> 一級指標

> 二級指標 

> 一維陣列 

> 二維陣列 

> 指標和陣列的關係 

> 指標陣列 

> 陣列指標 

> 函式指標 

一:一級指標:

此圖對應的**是:

#include

int main()

指標存在原因是什麼?

乙個小的單元是乙個位元組

對於32位機器,假設有32根位址線,那麼位址是:

00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000001

……11111111 11111111 11111111 11111111

那麼就有2^32個位址

在32位機器上,乙個位址大小是4個位元組,64位機器上,乙個位址大小是8個位元組。

注:1.指標是為了存放位址,位址是為了標示一塊位址空間。

2.指標讓位址有地方存放,指標讓記憶體的訪問變得便捷。

3.指標的大小在32位平台是4位元組,在64位是8個位元組。

指標型別

char* p = null;

int* p = null;

short* p = null;

long* p = null;

float* p = null;

double* p = null;

指標是有型別的:type+*的方式。

不同的型別指標是為了存放不同型別變數的位址。

這樣做是為了:確定了指標運算的規律,定出了一定的規則。

指標型別是通過:

1.指標+-整數;

2.指標的解引用

來確定指標的運算規律。接下來我一一舉例:

指標+-整數:

#include

int main()

它的執行結果是:

可見:指標的型別決定了指標向前或向後走一步的距離。

指標的解引用:

指標的型別決定,對指標解引用能操作幾個位元組。

二.二級指標:

首先任何值都有位址 ,一級指標的值雖然是位址,但這個位址做為乙個值亦需要空間來存放,是空間就具有位址 ,這就是存放位址這一值的空間所具有的位址,

二級指標

就是為了獲取這個位址。 ——《搜狗百科》

int a = 10;

int * pa = &a;

int** ppa = &pa; 

請看此圖:

關於二級指標的運算:

1.*ppa:通過對ppa中位址進行解引用,找到了pa:

.   int x = 0;

*ppa = &b;

2.**ppa通過*ppa找到pa,再*pa找到a:

*ppa = 30;

關於一維陣列和二維陣列,前面在《**陣列》一文中已經提到。

接下來介紹指標陣列,陣列指標與函式指標:

一:指標陣列:

首先我要明確乙個概念:指標陣列是陣列!

指標陣列是陣列,是乙個存放指標的陣列。

以下:int* arr1[10]

char* arr2[5];

char **arr3[6];都是指標陣列

另外:char* arr[3] = ;也是正確的:

注:計算時:

sizeof(arr);   大小是12,共有三個位址

strlen(arr);    大小是隨機值

二.陣列指標:

同樣的道理,陣列指標是指標!

是指向陣列的指標。

int (*p)[10];

//解釋:p和*先結合,表示p是乙個指標,是指向乙個大小為10個整形的陣列。

型別是:int (*) [10]

陣列指標如何使用?

這裡我們可以看出,陣列的位址和陣列首元素位址的值相同,但是意義不同。

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

來儲存。

因為p是乙個陣列指標,存放陣列的位址最合適。

那麼,二維陣列傳參是怎麼做的?

了解了這些之後:

int arr[3];

int *p1[5]; //指標陣列

int (*p2)[5];  //陣列指標

int (*p3[5]) [3];  //存放陣列指標的陣列

三:函式指標

這兩個位址是test函式的位址,那麼位址如何儲存呢?

void test()

void (*pfun)();

pfun先和*結合,是指標,指標指向函式,指向的函式無引數,無返回值。

int (*parr[10])();

parr先和結合,說明parr是陣列,陣列的內容是int(*)()型別的函式指標

指向函式指標陣列的指標:

int (*(*parr)[10])();

parr是乙個指標,該指標能指向乙個陣列,該陣列是乙個函式指標陣列,陣列的每個元素是乙個函式指標,

該函式指標能夠指向乙個引數是int,char,返回型別是void的乙個函式。

部分c語言知識總結

持續更新ing 1.extern關鍵字的作用 1.引用同乙個檔案中的變數 2.引用不同檔案中的變數 3.引用不同檔案中的函式 需要指明函式型別和返回值 2.全域性變數可不可以定義在可被多個.c 檔案包含的標頭檔案中?為什麼?答 可以,在不同的 c 檔案中以 static 形式來宣告同名全域性變數。可...

C語言基礎知識部分總結一

一 字元資料的非格式化輸入 getchar 讀取使用者的按鍵資訊,他的返回值是使用者按鍵的ascii碼 工作原理 呼叫getchar時,程式等待從緩衝區中取出第乙個字元 使用者輸入的字元存放在鍵盤緩衝區,直到使用者按回車鍵為止 如果使用者輸入的不止乙個字元,那麼其他的字元將留在鍵盤緩衝區,等待後續的...

C語言指標知識

c語言指標部分知識學習 指標是c語言的乙個重要概念,也是c語言的乙個特色。本次我們一起來了解c語言的部分指標知識。1.定義返回指標的函式 型別名 函式名 參數列列 float search float pointer 4 int n 2.關於運算子 的作用 pointer儲存著二維陣列number的...