[英]Using a fractional argument when dereferencing an array in C or C++
我想問一下,當在C或C ++中解引用數組時如果傳遞小數會發生什么。 我的意思的例子:
int arr1[],arr2[];
for (i = 0; i < 5; ++i)
{
if (i % 2 == 0)
arr1[i]=i;
else
arr2[i/2]=i;
}
看到arr2[3/2]
時,編譯器將做什么?
i/2
是整數除法。 此除法的結果將再次是整數,即除法的結果被截斷為0。( 3/2==1; -5/2==-2;
)(作為3/2==1; -5/2==-2;
,除法和截斷是所有的操作都只有一個操作:整數除法。大多數編譯器將在一個時鍾周期內執行此操作。)因此,您無需將小數傳遞給數組索引。
如果您嘗試傳遞的數據類型可以是小數(例如double
),則編譯器將生成錯誤。
該划分將首先發生,然后將答案用作數組索引。 因此,在您的示例中, 3/2
將解析為1
(截斷),然后將分配arr2[1]=i
。
3/2產生等於1的整數結果。在該行中永遠沒有“分數”。
arr2[3/2] ==== arr2[1]
編譯器看到arr2 [3/2]時會做什么?
編譯器什么也不做。 表達式“ 3/2”有效,並且在運行時將導致整數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.