整数変数にポインタを割り当てることはできますか?次のように。
int *pointer;
int array1[25];
int addressOfArray;
pointer = &array1[0];
addressOfArray = pointer;
このようにすることは可能ですか?
整数変数にポインタを割り当てることはできますか?次のように。
int *pointer;
int array1[25];
int addressOfArray;
pointer = &array1[0];
addressOfArray = pointer;
このようにすることは可能ですか?
いいえ、整数にポインタを割り当てることは無効です。これは、代入演算子(C99、6.5.16.1p1)の制約違反です。コンパイラーは、整数割り当てへのポインターを使用してプログラムを変換することを拒否する権利を持っています。
明示的なキャストなしではありません。
addressOfArray = (int) pointer;
この警告もあります:
6.3.2.3ポインタ
...
6任意のポインタ型を整数型に変換できます。以前に指定された場合を除き、結果は実装によって定義されます。結果を整数型で表現できない場合、動作は未定義です。結果は、整数型の値の範囲内である必要はありません。
したがって、結果が意味のある整数値であるとは限りません。
これは、組み込みプログラミングで頻繁に行われますが、いくつかの注意点があります。
いいえ。
「int」変数に「pointertoint」値を割り当てようとしています。確かにコンパイラの警告が表示されます。あなたができること:
int *pointer;
int array1[25];
int *addressOfArray;
pointer = &array1[0];
//The following commented lines are equivalent to the pointer assignment above and are also valid
//pointer = array
//pointer = &array[0]
addressOfArray = pointer;
これは浅いコピーとして知られています。概念にまだ精通していない場合は、それを読むことを強くお勧めします(Googleの「ディープコピーとシャローコピー」)。
あなたはこのようにそれを行うことができます:
memcpy(&addressOfArray, &pointer, sizeof(int));
これは、基になるバイトを直接コピーしてキャスト演算子に取って代わりますが、システムでそれを確実に知っている場合を除いて、絶対にお勧めしませんsizeof(int) == sizeof(int *)
。