给定 C 中的指向数组的指针,我们能否为其分配足够的内存以存储额外的元素(超出指定的数组大小),然后使用 [] 运算符或指针算法安全地访问这些元素?
考虑这个例子:
int (*foo)[ 10 ]; //Declare pointer to array of ten ints
foo = malloc( sizeof( int ) * 20 ); //Allocate memory for TWENTY ints
(*foo)[ 15 ] = 100; //Access element in "extra" space via [] operator
*( *foo + 16 ) = 200; //Access element in "extra" space via pointer arithmetic
printf( "%d\n", *( *foo + 15 ) ); //Prints 100
printf( "%d\n", (*foo)[ 16 ] ); //Prints 200
此代码编译良好并在 gcc 中产生正确的结果。但是,我不确定它是否会调用未定义的行为。
谢谢!