我嘗試以下代碼指向2D陣列與不相容的行長度
char arr[5] = {'A', 'E', 'I', 'O', 'U'};
char (*p_arr)[1] = &arr;
printf("%c\n", p_arr[0][4]); //returns 'U'
爲什麼沒有任何錯誤,因爲
char (*p_arr)[1] = &arr;
似乎是從不兼容的類型的初始化(char (*)[5]
而不是要求char (*)[1]
)?此外,p_arr[0][4]
要求陣列的第5個元素應該只有1
元素。這不是錯的嗎?
你確定構建? 'p_arr'和'&arr'的類型是不同的,不應該允許初始化。 –
至於我認爲你的問題是,C沒有邊界檢查。 –
By _「C沒有界限檢查」_你的意思是說C編譯器不在'char(* p_arr)[1] = &arr;'中使用'[1]'信息。如果是這樣的話,C的靜態內存分配是不是有問題? –