『Cとポインタ』のノートを勉強する
2540 ワード
Cとポインタという本を読むとき、第6章ではリストの文字列の中で特定の文字を検索する2つのバージョンについて見て、バージョン2で言及されたポインタの配列を破壊する原因を分析して、先にプログラムを書きました.
char**はポインタを指すポインタであり、ここではポインタ配列と見なし、配列中の要素はcharを指すポインタであり、各文字列のヘッダアドレスを指す.本の中でバージョン2のプログラムがこのポインタの配列を破壊すると言っているのは、*(*strings)++という表現の中で、(*strings)は文字列のヘッダアドレスを指しているので、*(*strings)++を実行すると、++の優先度が*より高いため、(*strings)は先にその値を++し、(*strings)は文字列の2番目の要素を指すので、ポインタの配列を破壊します.
/* */
#include
#define TRUE 1
#define FALSE 0
int find_char( char **strings, char value )
{
char * string;
while ( ( string = *strings++ ) != NULL )
{
while ( *string != '\0' )
{
if ( *string++ == value )
return TRUE;
}
}
return FALSE;
}
/* */
#include
#include
#define TRUE 1
#define FALSE 0
int find_char( char **strings, int value )
{
assert( strings != NULL );
while ( *strings != NULL )
{
while ( **strings != '\0' )
{
if ( *(*strings)++ == value )
return TRUE;
}
strings++
}
return FALSE;
}
char**はポインタを指すポインタであり、ここではポインタ配列と見なし、配列中の要素はcharを指すポインタであり、各文字列のヘッダアドレスを指す.本の中でバージョン2のプログラムがこのポインタの配列を破壊すると言っているのは、*(*strings)++という表現の中で、(*strings)は文字列のヘッダアドレスを指しているので、*(*strings)++を実行すると、++の優先度が*より高いため、(*strings)は先にその値を++し、(*strings)は文字列の2番目の要素を指すので、ポインタの配列を破壊します.