3

典型的な環境を考えてみましょう。次のコードが C で違法なのはなぜですか?

{
int x;
&x = (int*) malloc(3*sizeof(int));
...
}
4

7 に答える 7

31

のアドレスは左辺値ではないxため、のアドレスに何かを割り当てることはできませんx

(Anlvalueは「代入できるもの」です。つまり、等号の左側に置くことはできませ)

試す

int* x;
x = (int*) malloc(3*sizeof(int)); // TODO: Call free(x) 

x割り当てられたメモリを指すようになり、次のようなことができます

int foo = *x;
int bar = x[0];

次のように演算子を使用して、のアドレスをのものに割り当てることができます。x &

int x = 1;
int* y = &x;  // y now holds the address of x
*y = 2;       // Now x = 2
于 2009-03-13T00:49:31.373 に答える
11

x のアドレスは左辺値ではないため、変更できるものではありません。C では、アドレスが指すものを変更できますが、アドレス自体を変更することはできません。

于 2009-03-13T00:50:01.887 に答える
3

誰もが正しいです。コード実行時の X のアドレスは定数です。言い換えれば、「コンパイラである私が 'x' 変数を格納する場所を変更できます」ということです。

あなたはこれを行うことができます

int main()
{
    int* x;
    *(&x) = malloc(3*sizeof(int));

}
于 2009-03-13T01:00:07.853 に答える
2

変数のアドレスは変更できません。代わりに、おそらく次のようなものが必要です。

int *x = (int *)malloc(3 * sizeof(int));
...
free(x);
于 2009-03-13T00:49:40.000 に答える
1

&x は、x へのポインターを返します。割り当ての左側では使用できず、右側でのみ使用できます。

ポインターに何かを割り当てたい場合は、 int *x;のようにポインターとして宣言する必要があります。

于 2009-03-13T00:52:16.950 に答える
0

それが言語の設計方法です。必要なことを行うには、ポインターを使用します。

于 2009-03-13T00:49:54.650 に答える