2011-12-07 75 views
0

在C語言中的循環,如果你有下面的代碼:關於數據類型和用逗號

for (size_t x, y = someValue; y > 0; y -= x, ptr1 += x, ptr2 += x) 
{ 
     // do stuff 
} 

將變量y也是size_t類型,或者這將是一個int?

回答

5

int a,b,c; 
size_t x,y,z; 

聲明意味着所有A,B,C的是相同的類型(INT),其是x,y和z(爲size_t)

for循環內的聲明沒有什麼不同 - 在你的榜樣x和y的類型爲size_t

然而在你的榜樣x未初始化(僅Y設置爲somevalue)的 - 除非環路的身體設置到某個地方你會發現y -= x會給你隨機未定義的結果。

+3

不是最佳的話,未定義的效果會更好。 –

0

這只是一樣,如果你這樣做:

size_t x, y = someValue; 

在這種情況下x和y是size_ty = someValue

0

y將同時作爲xsize_t,就像它與for循環外同樣的表情:

size_t x, y = someValue; 

一個簡單的方法來找出是剛剛打印的大小變量爲自己,只要sizeof(size_t) != sizeof(int)(如果是,只需將size_t更改爲char以使差異明顯)。

0

在你的例子中是的; xy都是size_t類型。然而,添加到您的混亂,考慮聲明:

int *x, y; 

在這種情況下x是一個指向int,但y只是一個int

0
for (size_t x, y = someValue; y > 0; y -= x, ptr1 += x, ptr2 += x) 
    { 
      // do stuff 
    } 
  1. x和y都是 「爲size_t」(通常4個字節在大多數平臺)

  2. y被初始化爲 「someValue中」。

  3. x然而,是未初始化的。

int main (int argc, char *argv[]) {
size_t x, y = 1;
printf ("x=%d, y=%d, sizeof(x)=%d...\n", x, y, sizeof (x));
return 0; }

X = 4201366,Y = 1,的sizeof(X)= 4 ...

隨機