这个问题好像有点似是而非。常用的32位系统下的c的int 都是32bits,也就是说最初由 Kent以东首帅哥 发布
其中之一是:
i应该是unsigned int,因为C语言的数组下标永远是从0开始,不可能有负数,用int来做下标说明思想不清。
假如因为某种原因i被改变成负数,必然破坏堆栈里其它数据,还不容易发现.而如果用unsigned int,即使
i被改变,多半变成一个很大的正数,投射到被系统保护的其它内存区,一下就出现access violation,很容易发现改正。
一个特例是8088,16位计算机系统20位地址总线,不过敌人很狡猾,采取了段/偏移寻址,也不会出现类似帅哥指出的问题。最初由 mooncake 发布
这个问题好像有点似是而非。常用的32位系统下的c的int 都是32bits,也就是说
int b = negative or positive value
uint a = n + (uint)b; //could be an overflow
uint c = n + b; //could be an overflow, too
a == c
相似地,64位和16位系统下c的int 是64/16bits,可以推导出同样的结果。当然,如果32bits system的int 定义为16bit或者64 bits system 的int 定义为32bits,就会有帅哥提出的问题了。这种情况并不常见。
最初由 Kent以东首帅哥 发布
弄了十来年了,每次看看都会发现些新东西,象下面这样的小程序,里面竟然还会隐含一个设计错误。
void main()
{
int i;
int iArray[20];
(for i=0;i<20;i++){
iArray = 1;
}
}