在C語言中,二級指標有什麼用處?

時間 2021-05-31 10:24:02

1樓:

比較明顯的乙個作用,就是減少函式傳參,不然還需要傳乙個*index,來指示函式呼叫後的記憶體偏移量,傳**進去,函式呼叫後,你的指標就自動指向偏移後的位址了。

2樓:Belleve

指標的陣列,尤其是指向 struct 的指標的陣列,比如

typedef

struct

Record

;typedef

struct

RecordList

;指標的引用,比如拿來改指標變數值型別的二維陣列

3樓:

修改指標值,舉個例子,一般通過free釋放用malloc分配的記憶體時,會習慣性的將該指標「拴在」NULL,也就是:void FREE(void **pp)

}可變參列表二級指標,實現簡單的printf:void printf(char const *fmtchar **args = (char **)&fmt;

char str[5];

args++;

while(*fmt)

char *p;

fmt++;

switch(*fmt++) {

case 'd':

itoa(*((int *)args++), str, 10);

p = str;

goto outstr;

break;

case 's':

case 'c':

p = *args++;

outstr:

write_str(Red, p);

break;

default:

break

4樓:

用處太多,將來自己就明白了。

通常是因為,希望別人給自己的乙個指標賦值。

比如 COM 介面的指標是 void* 型別,獲取 COM 介面的函式的引數就是 void**。

當然了,這個東西,需要你有更多實踐,理解更加深入後,自然就逐漸理解了。

|addr

|value||

20|0A

|ch1←-

┐│|21

|CC|│

│|22|

20|p1--┘←

--┐│|

23|22|

pp1--------

┘現在我們假設有乙個變數

char

ch1=

0x0A

;// 假設 ch1 的位址位於 20H: m[20H] = 0AH;

char*p1

=&ch1;

char

**pp1=&

p1;假設記憶體空間,我們看做乙個陣列: char[ ]; 為這個陣列取個名字叫做 m,例如:

charm[

256];

現在我們得到那個 0x0A ,就可以通過

char

ch2=

**pp1

;因此,我們就可以理解成:

char

ch2=m[

m[pp1]

];//解二級指標引用。

這是二級指標;

同樣,char

ch3=*p1

;可以理解成:

char

ch3=m[

p1];

//解指標引用

OK,在彙編層面,就是這樣(在組合語言中,沒有 m,只會出現 [ ]) 。比如說:

MOV EAX, [ EDX + 8 ]

CALL EAX

你該 get 它了。

5樓:尹明明

最簡單的乙個例子,當你想動態分配記憶體給二位陣列(矩陣,表,等等)的時候,你就可以使用**了。比如想建立乙個n x m的int矩陣,行數n和列數m由使用者輸入,你就可以使用int**來儲存這個二維陣列,然後再動態分配記憶體給這個陣列。

6樓:

那些只是只想指標的指標罷了。指標也是乙個內建基本資料型別,可以有指標來指向指標。用法與普通指標一樣,只不過指標指向的變數同樣是乙個指標。

C語言指標與二級指標的問題?

已登出 列印不出來是因為這條語句將嘗試訪問非法 程式不該訪問 的記憶體。printf s pt 嘗試訪問超出劃定範圍的記憶體空間,被作業系統攔下 答主重現了一下,那麼從下圖可以看出,p和pt的位址是0x00affb6c,abc 的首位址是0x00de6b30 那麼解引用pt得到的是0x00de6b3...

在C語言中, a N 與 a N 有什麼區別?

知了 剛好有看過這裡,嘗試著回答一下。這其實和C語言運算子優先順序有關,弄懂這一點就會比較清楚,這裡涉及兩個運算子,下標引用和間接訪問 下標引用運算子優先順序高於間接引用,所以 a N 首先是乙個陣列,而陣列的元素是指標 加上小括號之後,即在 a N 中,要先進行 運算,所以a是乙個指標,指向乙個具...

C語言中學習整數型別的取值範圍有什麼用,有什麼意義啊?

黃達 程式設計中,對於你定義的任何乙個 量 你都必須要清楚它的範圍。比如月份是1 12,考慮閏月就是1 13,用了0就是0 12。如距離,1mm 60000mm,超過這個數我不處理。這樣你才能決定用什麼樣的儲存形式來儲存這個量。比如1mm 60000mm的距離,儲存在32位無符號整數裡是合適的,64...