逆参照について話すとき、その*
中で を使用する必要がありますか? 他の方法でポインターの指示対象にアクセスする場合、次のように、ポインターを逆参照していると見なすことができますか。
char *ptr = "abc" ;
printf( "%c" , *ptr ); // Here pointer is dereferenced.
printf( "%s" , ptr ); // What about this one?
それが私の質問の最初の部分です。
逆参照の例である場合printf( "%s" , ptr )
は、私の質問の次の部分にも親切に答えてください。
K&R 言う
「void へのポインター」は、任意の型のポインターを保持するために使用されますが、それ自体を逆参照することはできません
したがって、
char a = 'c' ;
char *p = &a ;
void *k = &a;
printf( "\n%c\n" , *p );
printf( "\n%c\n" , *k );
コンパイルしない、コンパイラがエラーを出す
関数 'main' 内: 警告: 'void *' ポインターの逆参照エラー: 無効な void 式の使用
しかし、私たちが使用する場合
char *a = "c" ;
char *p = a ;
void *k = a;
printf( "\n%c\n" , *p );
printf( "\n%s\n" , k );
コンパイルして動作します。これは、void ポインターを逆参照できることを意味します。参照しているオブジェクト ポインターを取得しました。
その場合、上記の K&R の引用はこの文脈で何を意味するのでしょうか?
御時間ありがとうございます。