在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 ...
随机
不是最佳的话,未定义的效果会更好。 –