我一直在审查C编程,但有几件事困扰着我。
让我们以以下代码为例:
int myArray[5] = {1, 2, 2147483648, 4, 5};
int* ptr = myArray;
int i;
for(i=0; i<5; i++, ptr++)
printf("\n Element %d holds %d at address %p", i, myArray[i], ptr);
我知道一个int可以容纳正数2,147,483,647的最大值。因此,通过遍历它,是否“溢出”到下一个内存地址,从而导致元素2在该地址处显示为“ -2147483648”?但这并没有真正的意义,因为在输出中它仍然说下一个地址保持值为4,然后是5。如果该数字已溢出到下一个地址,则不会改变存储在该地址的值?
我隐约记得在MIPS Assembly中进行编程时,看着地址在程序执行过程中逐步改变了值,分配给这些地址的值会改变。
除非我没有记错,否则这是另一个问题:如果分配给特定地址的数字大于类型(如myArray [2]中的类型),那么它是否不影响存储在后续地址中的值?
示例:我们在地址0x10010000处有int myNum = 40亿。当然,myNum不能存储40亿,因此它在该地址显示为负数。尽管不能存储这么大的数字,但它对存储在后续地址0x10010004上的值没有影响。正确?
内存地址仅具有足够的空间来容纳某些大小的数字/字符,如果大小超出限制,则其表示方式将有所不同(例如尝试将40亿存储到int中,但它将显示为负数),并且因此,它不会影响下一个地址中存储的数字/字符。
对不起,如果我过分。从那以后,我整天都在闹大闹鬼。
int c = INT.MAXINT; c+=1;
,看看c发生了什么。