کاملاً رایج است که اگر به عنصری از یک عنصر دسترسی پیدا کنید array as arr [i]
در C که می توانید به عنصر as i [arr]
دسترسی پیدا کنید ، زیرا اینها فقط به * خلاصه می شوند (arr + i)
و جمع جایگزین است. سوال من این است که چرا این مورد برای انواع داده های بزرگتر از char
کار می کند ، زیرا sizeof (char)
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;
}
پس چرا افزودن یک به نشانگر آرایه ، آن را با sizeof (ساختار بزرگ)
پیش می برد؟