2011-09-08 44 views
2

なぜこのコードで警告が表示されるのですか? "test"の引数1を互換性のないポインタ型から渡しますか?私はchar **の前にconstについて知っていますが、なぜですか?なぜ引数を渡すときにconstを使うと警告が出るのですか?

void test(const int ** a) 
{ 
} 
int main() 
{ 
    int a=0; 
    int *b=&a; 
    int **c=&b; 
    test(c); 
    return 0; 
} 
+0

が重複する可能性をchar * const * 'in C?](http://stackoverflow.com/questions/78125/why-cant-i-convert-char-to-a-const-char-cons t-in-c) –

答えて

5

人間が読める表現を与えるかなりいい方法です、あなたがそのようにした場合、後者のポインタを使用すると、int *変数にconst intオブジェクトのアドレスを与えることができるでしょうので:[なぜ私は「CONST「に文字を**」に変換することができないの

const int myconst = 10; 
int *intptr; 
const int **x = &intptr; /* This is the implicit conversion that isn't allowed */ 
*x = &myconst;    /* Allowed because both *x and &myconst are const int * ... */ 
/* ... but now intptr points at myconst, and you could try to modify myconst through it */ 
0

この質問への第二の答えは役に立つかもしれません:

Why can't I convert 'char**' to a 'const char* const*' in C?

は残念ながら受け入れ答えは非常に良好ではなく、その理由を説明するために何もしません。

+0

回答の表示順序がランダム化されており、オーナーがどの回答を受け入れるかを変更することができるので、参照する回答を明確にすることができます。また、私はその質問が特に重要ではないと言っています。この質問は 'int **'を 'const int **'に変換する場合について質問します(第2の 'const'がないことに注意してください) –

2
const int ** 

のconst int型へのポインタへのポインタですが、あなたはポインタと言う私はあなたがint ** constでテストを宣言したいかもしれないと思うint型

へのポインタへのポインタを渡していますconstであり、値ではありません。

注:と私は、これはCでのポインタに関するすべての質問に置かれるべきだと思う:cdecl.orgあなたはconst int **int **を割り当てることはできません

関連する問題