簡體   English   中英

在C或C ++中解引用數組時使用小數參數

[英]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]
  1. 數組索引應為整數。 如果使用浮點類型,則將其強制轉換為整數。
  2. integer1 / integer2在c / c ++中產生另一個整數。

編譯器看到arr2 [3/2]時會做什么?

編譯器什么也不做。 表達式“ 3/2”有效,並且在運行時將導致整數。

暫無
暫無

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

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