在C語言中的循環,如果你有下面的代碼:關於數據類型和用逗號
for (size_t x, y = someValue; y > 0; y -= x, ptr1 += x, ptr2 += x)
{
// do stuff
}
將變量y也是size_t類型,或者這將是一個int?
在C語言中的循環,如果你有下面的代碼:關於數據類型和用逗號
for (size_t x, y = someValue; y > 0; y -= x, ptr1 += x, ptr2 += x)
{
// do stuff
}
將變量y也是size_t類型,或者這將是一個int?
的
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
會給你隨機未定義的結果。
這只是一樣,如果你這樣做:
size_t x, y = someValue;
在這種情況下x和y是size_t
和y = someValue
。
y
將同時作爲x
,size_t
,就像它與for
循環外同樣的表情:
size_t x, y = someValue;
一個簡單的方法來找出是剛剛打印的大小變量爲自己,只要sizeof(size_t) != sizeof(int)
(如果是,只需將size_t
更改爲char
以使差異明顯)。
在你的例子中是的; x
和y
都是size_t
類型。然而,添加到您的混亂,考慮聲明:
int *x, y;
在這種情況下x
是一個指向int
,但y
只是一個int
。
for (size_t x, y = someValue; y > 0; y -= x, ptr1 += x, ptr2 += x)
{
// do stuff
}
x和y都是 「爲size_t」(通常4個字節在大多數平臺)
y被初始化爲 「someValue中」。
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 ...
隨機
不是最佳的話,未定義的效果會更好。 –