C の char ポインターをもっと理解しようとしていますが、1 つのことがわかります。
char ポインターを関数に渡し、ポインターが表す値を変更したいとします。以下に例を示します。
int Foo (char *(&Msg1), char* Msg2, char* Msg3){
char *MsgT = (char*)malloc(sizeof(char)*60);
strcpy(MsgT,"Foo - TEST");
Msg1 = MsgT; // Copy address to pointer
strcpy(Msg2,MsgT); // Copy string to char array
strcpy(Msg3,MsgT); // Copy string to char pointer
return 0;
}
int main() {
char* Msg1; // Initial char pointer
char Msg2[10]; // Initial char array
char* Msg3 = (char*)malloc(sizeof(char) * 10); // Preallocate pointer memory
Foo(Msg1, Msg2, Msg3);
printf("Msg1: %s\n",Msg1); // Method 1
printf("Msg2: %s\n",Msg2); // Method 2
printf("Msg3: %s\n",Msg3); // Method 3
free(Msg1);
free(Msg3);
return 0;
}
上記の例では、char ポインターを関数に渡すために知っているすべての作業メソッドをリストしました。私が理解していないのはMethod 1です。
char *(&Msg1)
関数に渡される最初の引数の意味は何Foo
ですか?
また、方法 2と方法 3は本やチュートリアルで広く紹介されているようで、それらの方法を配列/ポインターを渡す最も正しい方法として参照している人もいます。方法 1は私にはとてもいいと思います。特に API を作成するとき、ユーザーは事前にメモリを割り当てずにヌル ポインターを関数に簡単に渡すことができます。唯一の欠点は、ユーザーがメモリ ブロックを解放するのを忘れた場合にメモリ リークが発生する可能性があることです (方法 3と同じ)。Method 3 の代わりにMethod 2 または 3を使用することを好む理由はありますか?