我試圖理解指標和陣列之間的區別,所以我創建了一個簡單的程式。我所做的就是將一個字符分配給指向一個字符的指標。所以據我所知,有兩種方法可以做到這一點。第一個:使用解參考運算子第二個:使用方括號
有關更多詳細資訊,請讓我提供代碼
char **array2 = malloc(sizeof(char*));
*array2[0] = 'c';
以上似乎不起作用
我試過的第二個版本是這個
char **array2 = malloc(sizeof(char*));
**array2 = 'c';
首先,這些代碼都不適合我。二、這兩個版本有什么區別
uj5u.com熱心網友回復:
在語法上,x[y]和*(x y)完全一樣。所以兩段代碼都在做同樣的事情。問題是您試圖取消參考無效指標。
初始化后,array2指向單個型別物件的指標,該物件char *可以作為array2[0]或訪問*array。此指標物件未初始化。然后,您嘗試取消參考這個未初始化的指標并為取消參考的物件分配一個值。試圖取消參考無效指標會觸發未定義的行為。
您可以通過為此指標分配記憶體來指向:
char **array2 = malloc(sizeof(char*));
array2[0] = malloc(sizeof(char));
*array2[0] = 'c';
這相當于:
char **array2 = malloc(sizeof(char*));
*array2 = malloc(sizeof(char));
**array2 = 'c';
或者你擺脫了額外的間接級別:
char *array2 = malloc(sizeof(char));
array2[0] = 'c';
*array2 = 'c';
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/467413.html
標籤:C
上一篇:為雙指標的頂層分配記憶體
