typedef struct mystruct{
int a;
char arr[10];
char *str;
}mystruct;
void f(void *data, int offset){
char *s = (char *)(data + offset);
printf("%s", s);
}
void g(void *data, int offset){
char *s = *(char **)(data+offset);
printf("%s", s);
}
int main(){
mystruct test;
test.a = 2;
test.str = malloc(100);
strcpy(test.arr, "Hello ");
strcpy(test.str, "World!");
f(&test, offsetof(mystruct,arr));
g(&test, offsetof(mystruct,str));
return 0;
}
文字列を出力するために 2 つの異なる方法が必要なのはなぜだろうか。関数fで、(データ + オフセット) が実際に指しているのは何ですか? 文字列の最初の要素への char ポインターであるarrを指していませんか? しかし、関数gでは、 (data + offset) も char ポインターを指しています。では、同じタスクを実行するために 2 つの異なるアプローチを使用する必要があるのはなぜでしょうか?