众所周知,如果你像arr[i]在C中那样访问数组元素,你也可以访问元素i[arr],因为这些只是归结为*(arr + i)并且加法是可交换的.我的问题是为什么这适用于大于的数据类型char,因为sizeof(char)是1,而对我来说,这应该只用一个char来推进指针.
也许这个例子让它更清晰:
#include <string.h>
#include <stdio.h>
struct large { char data[1024]; };
int main( int argc, char * argv[] )
{
struct large arr[4];
memset( arr, 0, sizeof( arr ) );
printf( "%lu\n", sizeof( arr ) ); // prints 4096
strcpy( arr[0].data, "should not be accessed (and is not)" );
strcpy( arr[1].data, "Hello world!" );
printf( "%s, %s, %s\n", arr[1].data, 1[arr].data, (*(arr+1)).data );
// prints Hello world!, Hello …Run Code Online (Sandbox Code Playgroud)