簡體   English   中英

當指針指向數組時,為什么 operator(*) 的值不起作用?

[英]Why value at operator(*) not work when the pointer is pointing to an array?

我有以下兩個代碼片段將一個數組復制到另一個數組中 C 編寫的 VS 代碼:

片段1~

int arr[5]={1,2,3,4,5};
int arr_copy[5];
int *ptr = arr;
arr(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;
    arr(int i=0; i<5;i++)
    {
        arr_copy[i]=ptr[i];
    }

第一個片段在編譯時拋出一個錯誤,說 *ptr[i] 無效,但第二個片段有效。 第一個不應該返回存儲在指針 ptr[i] 的值,而第二個應該返回 ptr[i] 的 integer 地址嗎? 僅僅是 C 語法的編寫方式還是背后有一些邏輯?

讓我們一步一步地通過這個go。

  1. ptr是指向arr的第一個元素的指針。
  2. ptr[i]等價於*(ptr+i) ,或者在這種情況下是arr[i]
    • 你看,在幕后有一個隱式的取消引用操作。
  3. *ptr[i]將嘗試引用存儲在數組中的integer 值,即從有點隨意的 position 讀取 memory。 這幾乎總是會失敗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM