arr[i]
C のように配列の要素にアクセスする場合、要素に としてアクセスすることもできるというのはかなり一般的な知識i[arr]
です*(arr + i)
。私の質問は、なぜこれがより大きいデータ型で機能するのかというchar
ことsizeof(char)
です.1であるためです.私にとっては、ポインタを1文字だけ進める必要があります.
おそらく、この例はそれをより明確にします:
#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 world!, Hello world!
// I expected `hold not be accessed (and is not)' for #3 at least
return 0;
}
では、なぜ配列ポインタに 1 を追加すると だけ進むのsizeof( struct large )
でしょうか?