数组:越界计算
Arrays: Out of Bounds Computation
此程序在带有 GCC v4.8.1 的 CodeBlocks v13.12 上运行时给出输出:2, 0
。有人可以解释为什么或如何吗?
#include <stdio.h>
int main ( )
{
int function [ 2 ] [ 3 ] = { { 1, 2, 3 }, { 4 } }, i = 1, j = 1;
function [ i + 1 ] [ j ] = function [ j ] [ i + 1 ]; // Assignment Statement
printf ( "%d, %d", function [ i ] [ j ], function [ j ] [ i + 1 ] );
return 0;
}
我还注意到在 Assignment Statement
中,表达式的 LHS 总是分配给变量 i
。因此,例如,如果语句更改为:
function [ i + 1 ] [ j ] = 100; // Assignment Statement
i
的值将是 100
。
function [ i + 1 ] [ j ]
越界访问数组将导致未定义的行为。
function [ 2 ]
是数组越界访问。
此程序在带有 GCC v4.8.1 的 CodeBlocks v13.12 上运行时给出输出:2, 0
。有人可以解释为什么或如何吗?
#include <stdio.h>
int main ( )
{
int function [ 2 ] [ 3 ] = { { 1, 2, 3 }, { 4 } }, i = 1, j = 1;
function [ i + 1 ] [ j ] = function [ j ] [ i + 1 ]; // Assignment Statement
printf ( "%d, %d", function [ i ] [ j ], function [ j ] [ i + 1 ] );
return 0;
}
我还注意到在 Assignment Statement
中,表达式的 LHS 总是分配给变量 i
。因此,例如,如果语句更改为:
function [ i + 1 ] [ j ] = 100; // Assignment Statement
i
的值将是 100
。
function [ i + 1 ] [ j ]
越界访问数组将导致未定义的行为。
function [ 2 ]
是数组越界访问。