怎么可能读取和写入数组
计划的输出:
#include int main() { int size; printf("Enter the size of array: "); scanf("%d",&size); int b[size],i = 0; printf("Enter %d integers to be printed: ",size); while(i++ < size) { scanf("%d",&b[i]); printf("%d %d\n", i, b[i]); } return 0; }
对于size = 5
和输入数字:
0 1 2 3 4
是
1 0 2 1 3 2 4 3 5 4
其中第一列用于i
,第二列用于数组b
元素。
很明显, i
在循环中while(i++ < size) {
在进入循环之前递增到1
。 该循环应该必须存储/打印b[1], b[2], b[3], b[4]
而不是b[5]
因为循环将在i = 5
处终止。
这段代码如何打印b[5]
的值?
我已经测试了它的不同数组size
,并没有打印任何垃圾值。
通过读取和写入数组,您的程序将调用未定义的行为。 它并不意味着它必须崩溃或打印垃圾值,它可以假装工作正常。 显然,这就是这种情况下发生的事情。
在循环中,在i
递增之前检查条件i < size
。 但是, i
在进入循环体之前递增而不是在它之后,所以在这种情况下可以访问b[5]
,因为在检查i < size
i=4
之后i
会增加。 你不希望这样,因为这会导致未定义的程序行为。
如果您尝试访问数组中不存在的元素,例如array[size]
,则您正在访问arrays后面的内存中的下一个位置。 在这种情况下,您很幸运,但如果这意味着您正在访问不允许您的程序执行的内存的一部分,则会出现segmentation fault
。
你可以使用for循环代替一段时间而不是while(i++
for(i = 0; i < size; i++)
来解决你的问题我的朋友:)