我有以下兩個代碼片段可以將一個陣列復制到另一個用 C 撰寫的 VS Code 陣列中:
片段 1 ~
int arr[5]={1,2,3,4,5};
int arr_copy[5];
int *ptr = arr;
for(int i=0; i<5;i )
{
arr_copy[i]=*ptr[i];
}
片段2~
int arr[5]={1,2,3,4,5};
int arr_copy[5];
int *ptr=arr;
for(int i=0; i<5;i )
{
arr_copy[i]=ptr[i];
}
第一個片段在編譯時拋出一個錯誤,說 *ptr[i] 無效,但第二個片段有效。第一個不應該回傳存盤在指標 ptr[i] 處的值,而第二個應該回傳 ptr[i] 的整數地址嗎?這只是C語法的撰寫方式還是背后有一些邏輯?
uj5u.com熱心網友回復:
讓我們一步一步來。
ptr是指向第一個元素的指標arr。ptr[i]相當于*(ptr i),或者在這種情況下arr[i]。- 你看,在幕后有一個隱式的解參考操作。
*ptr[i]將嘗試參考存盤在陣列中的整數值,即從任意位置讀取記憶體。這幾乎總是會失敗。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/394538.html
上一篇:我在C中的結構鏈表有問題
