[ad_1]
こんにちは。 なぜ配列のアドレス(つまり、 &
) に変換できません **
Cで?
私が試したこと:
私は次のことを試しました..
C
#include <stdio.h> int main() { int** a; int b[5]; b[1] = 123; //a = &b; //< results in output of warning "assignment to ‘int **’ from incompatible pointer type ‘int (*)[5]’" int* c = b; a = &c; //< this works printf("*a is %i\n", (*a)[1]); return 0; }
私はそれを期待します。 b
に変換できます int*
、変換することは可能でしょう &b
に int**
。 ただし、これにより、上記のコード ブロックで説明した警告が表示されます。
Windows で mingw gcc を使用すると、これが (書き込みと読み取り) **
配列のアドレスに割り当てられたもの)は、実際には一度は機能しましたが、二回目は機能しませんでした。
解決策 1
b
は配列です。配列の名前は最初の要素へのポインタであるため、技術的には、 &b
整数へのポインタへのポインタです。 しかし、コンパイラはこれを (当然のことながら) 整数の配列へのポインタとみなしているため、これに同意しません。 また、配列はバックグラウンドで行われるポインター演算の糖衣構文であるため、皆さんが思っているように完全には機能しません。作ることで回避できます
b
代わりに int へのポインタ:
C
#include <stdio.h> #include <malloc.h> int main() { int** a; int* b = malloc(sizeof(int) * 5); b[1] = 123; a = &b; printf("*a is %i\n", (*a)[1]); free(b); return 0; }
[ad_2]
コメント