1

私はCが初めてで、ポインタの概念を少し知っていますが、 **char(Pointer to a pointer?) のようなものを見ると混乱します。だから私は関数を見ています、その定義は以下のようになります:

void Settings_ParseCommandLine( int argc, char **argv, thread_Settings *mSettings )

とにかく、私が今欲しいのは、 *argv が保持している値です。その上でPrintfを実行したいと思います。どうやってやるの?

4

5 に答える 5

6

argv文字列の配列です。 *argvの最初の文字列とargv[0]も呼ばれますargv。あなたが提案したとおりに印刷することができます:

printf("%s\n", *argv);

それらをすべて印刷したい場合(おそらくより便利です):

for (int i = 0; i < argc; i++)
    printf("%s\n", argv[i]);
于 2013-09-23T22:28:40.377 に答える
4
printf("%s\n", argv[0]);

また

printf("%s\n", *argv);

argcのエントリ数を確認してくださいargv

于 2013-09-23T22:28:43.953 に答える
3

何かが宣言されている場合char、それは (通常) 8 ビットの文字値であることを意味します。

何かが宣言されている場合、それはchar*へのポインタであることを意味しますchar

何かが宣言されている場合、それはchar**へのポインターへのポインターであることを意味しますchar

演算子を式のポインターに適用する*と、「逆参照」になり、ポインターが指す値が返されます。*おそらく複数回適用する場合、適用先はポインターへのポインターです。

上記の場合、char **argvargvパラメーターの宣言であり、 へのポインターへのポインターとして定義されますchar

理解すべき重要なことが他に 2 つあります。まず、ポインタは、単一の値ではなく、配列sometype*へのポインタである場合もあれば、そうでない場合もあります。(ポインタがどのように設定されたかを調べる以外に、これが事実かどうかを知る方法はありません。)sometypesometype

第 2 に、値の配列はcharC で「文字列」を表現する通常の方法であるため、char*多くの場合、文字列をアドレス指定します。

帰納法により、文字列へのポインターの配列へのポインターでchar** ある可能性があります。

于 2013-09-23T22:32:10.263 に答える
2

C では、通常char *a を文字列と考えますよね?したがって、char **文字列へのポインター、または char ポインターへのポインターと考えてください。これは、argv複数の文字列が含まれていることを意味します (それぞれの文字列は null で終了する必要があります)。 argc文字列がいくつ含まれているかを示しargvます。

印刷するには、次のようにしてください。

for (i = 0; i < argc; ++i)
  printf("%s ", argv[i])
于 2013-09-23T22:29:59.650 に答える
0

char** argvポインタへのポインタと考えることができますが、配列の配列と考えることもできます。文字列は C では文字の配列であるため、文字列の配列をchar**指します。

引数にアクセスしたい場合は、次のように実行できます。

// argv[0] is the executable name
char* first_arg = argv[1]; // argv[1] is the first argument and so on...
printf("first arg: %s\n", first_arg);

argcただし、使用する前に十分な引数があることを確認してください:)

于 2013-09-23T22:29:00.000 に答える