我不知道爲什麼我應該這樣做:爲什麼要在賦值時使用數組內存位置?
int myArray[5];
for(int i = 0; i < 5; i++)
{
scanf("%d", &myArray[i]);
}
取而代之的是:
for(int i = 0; i < 5; i++)
{
scanf("%d", myArray[i]);
}
我不知道爲什麼我應該這樣做:爲什麼要在賦值時使用數組內存位置?
int myArray[5];
for(int i = 0; i < 5; i++)
{
scanf("%d", &myArray[i]);
}
取而代之的是:
for(int i = 0; i < 5; i++)
{
scanf("%d", myArray[i]);
}
因爲scanf
需要知道內存中的位置,它應該寫入它讀取的輸入。要獲取內存位置,需要使用指針,並且myArray[i]
不是指針,而是一個值。
要獲得指針,可以使用與號(也稱爲地址的運算符)。你也可以依賴這樣一個事實,即數組自然衰減到指向它們第一個元素的指針,並使用指針算術,方法是隻使用myArray
並向數組中的條目添加一個偏移量。這工作,因爲myArray[i]
相當於*(myArray + i)
,同樣&myArray[i]
相當於&*(myArray + i)
(但由於運營商&
和引用操作*
的地址,否定對方,這是一樣的(myArray + i)
,這是一樣的myArray + i
)。
至於其他類型的變量,如果變量已經是一個指針,那麼你就不必使用地址運算符(因爲如果你這樣做,你會得到一個指針指針)例如,在讀取字符串時,您只需要傳遞實際變量。對於非指針變量,您需要使用address-of運算符。
然後,我必須用正常的int變量做同樣的事情嗎? –
@ErikW是的。 –
因爲[]
是數組下標操作,以及myArray[i]
類型是int
不int *
這就是scanf
期望當您使用"%d"
說明符時,您可以使用指針算術執行此操作
for(int i = 0; i <= 5; i++)
{
scanf("%d", myArray + i);
}
因爲myArray
將以這種方式處理時會像指針一樣工作。但myArray[i]
在int
所以你需要通過該地址int
。
請寫下你爲什麼贊成票! :) –