変数xを char ** として初期化することと、変数xを char * として初期化してから&を使用して参照することの違いは何ですか? この質問は、次の問い合わせから生まれました。
man 3 strtol関数を見ていました。関数のシグネチャは次のとおりです。
long strtol(const char *restrict str, char **restrict endptr, int base);
したがって、endptr変数を渡すために、変数をセットアップします。
char **endptr;
しかし、それを関数に渡すと、 strtolに渡されたstrがabcのようなものであった場合でも、常に NULL が返されました。いいえ:
char ** endptr;
long exitval = strtol(args[1], endptr, 10); /* try to get the val */
if (endptr != NULL) { /* it wasn't a valid base-10 number */
しかし、endptr を次のように初期化する方法を変更したとき:
char *endptr;
endptr を&endptrとして関数に渡すと、 endptrが正しく設定されました。いいえ:
char * endptr;
long exitval = strtol(args[1], &endptr, 10); /* try to get the val */
if (endptr != NULL) { /* it wasn't a valid base-10 number */
どちらの場合も、 char array の最初の char へのポインターへのポインターを渡していると思いましたが、一方のメソッドが機能し、もう一方のメソッドが機能しないという事実は、私の理解が間違っていることを示しています。
1 つの方法が機能し、もう 1 つの方法が機能しないのはなぜですか? 私は何を誤解していますか?