なぜこのコードで警告が表示されるのですか? "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;
}
なぜこのコードで警告が表示されるのですか? "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;
}
人間が読める表現を与えるかなりいい方法です、あなたがそのようにした場合、後者のポインタを使用すると、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 */
この質問への第二の答えは役に立つかもしれません:
Why can't I convert 'char**' to a 'const char* const*' in C?
は残念ながら受け入れ答えは非常に良好ではなく、その理由を説明するために何もしません。
回答の表示順序がランダム化されており、オーナーがどの回答を受け入れるかを変更することができるので、参照する回答を明確にすることができます。また、私はその質問が特に重要ではないと言っています。この質問は 'int **'を 'const int **'に変換する場合について質問します(第2の 'const'がないことに注意してください) –
const int **
のconst int型へのポインタへのポインタですが、あなたはポインタと言う私はあなたがint ** const
でテストを宣言したいかもしれないと思うint型
へのポインタへのポインタを渡していますconstであり、値ではありません。
注:と私は、これはCでのポインタに関するすべての質問に置かれるべきだと思う:cdecl.orgあなたはconst int **
にint **
を割り当てることはできません
が重複する可能性をchar * const * 'in C?](http://stackoverflow.com/questions/78125/why-cant-i-convert-char-to-a-const-char-cons t-in-c) –