怎么可能读取和写入数组

计划的输出:

#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++)来解决你的问题我的朋友:)