二級指標傳入函式引數,為何執行結果為空呢?在不用陣列指標情況下,如何改變b陣列,並在主函式輸出呢?

時間 2021-06-03 16:29:23

1樓:魔某人

如果乙個東西是多維陣列,那麼像這樣的寫法:

inta[10

][9];a

[m][n

];charb[

11][

45][

14];b[

r][s][

t];其等效寫法是:*(

a+9*

m+n);

*(b+

45*14*

r+14*

s+t);

而如果乙個東西是多級指標,那麼像這樣的寫法:

int**a;

a[m][

n];char

***b;b

[r][s

][t];其等效寫法則是:*(

*(a+

m)+n

);*(*

(*(b

+r)+

s)+t

);出現了語義錯誤。這就是執行結果不符合預期的原因。

多維陣列在以包括作為引數在內的方式傳遞時,發生失義,成為指標。因為陣列的維度和各維度大小是編譯時資訊,編譯程式不可能預知使用者以何種方式傳遞陣列,執行時能得知的只是被傳遞陣列的位址。

不用陣列指標,改變b陣列內容的方法有:

使用std

::array

2. 同時傳遞陣列位址和各維度大小,保留編譯時資訊,並在訪問時手動計算偏移量。

如何傳入乙個函式指標?

劉項 雖然用C語言中的函式指標也可以達到這個效果,但是我還是比較推薦C 中的仿函式來實現。仿函式相比函式指標有很多優點,比如型別安全。STL中有很多地方使用了仿函式,比如sort函式。sort a,a n,less 其中第3個引數就是個仿函式,在STL的原始碼中可以找到它的定義,也可以參見管清文的回...

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

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

在不同的gcc版本中,函式傳入指標,在函式執行結束後列印指標指向值會有不同嗎?

SPeak int plusOne int digits int digitsSize int returnSize c int plusOne int digits int digitsSize int returnSize cpp int plusOne int digits int digit...