2016-04-11 6 views
-4

これらの宣言は異なりますか、同じ結果が得られますか?これらの2つのポインタ宣言の違いは何ですか?

char * const *argv; 

const char **argv; 

違いはありますかまたは両方のポインタへのポインタがありますか?

struct command 
{ 
    char * const *argv; 
}; 

上記の構造体は、execを呼び出すために使用された:

背景には、私はCのコマンドラインシェルを書き込み、コマンドのため、この構造体を使用したことです。私は別の質問後、構造体が異なっていた時に見たとき今:その質問には

Connecting n commands with pipes in a shell?

同じことを達成するための構造体が異なっています。

+1

[C-FAQにあるこのエントリ](http://c-faq.com/ansi/constptrconst.html)が(助けるかもしれませんプラスあなたのケースへの補外の少し)。 – Evert

+2

@Shripadaコードには配列がありません。ポインタのみ。 – juanchopanza

+2

可能[複製](http://stackoverflow.com/questions/890535/what-is-the-difference-between-char-const-and-const-char) – jdarthenay

答えて

7

彼らは全く異なっている:

char *const *argv;は "charへのconst ポインタへのポインタ" を宣言します。

const char **argv;は、 "const charへのポインタへのポインタ"を宣言します。

また、char **const argv;は、 "const"へのポインタへのポインタを宣言します。

"裏返し"、それらを読んでみてください、これらの宣言を理解するために:http://c-faq.com/decl/cdecl1.html

+1

回答はミスタイプに基づいている可能性があります。私は彼が 'const char * argv;'を意味したと思う。 1つ少ない星:) – Michi

関連する問題