友人 私はいくつかのポインター プログラムをいじっていて、GCC (およびおそらく C 標準) が静的配列と動的配列を区別していることに気付きました。
動的配列には配列内の要素のアドレスのプレースホルダーがありますが、静的配列の場合、コンパイラーが要素配列の開始アドレスを格納するメモリー位置はありません。
私の混乱を示すためのサンプルプログラムがあります。
#include <iostream>
#int main(void)
{
int _static[10];
int *_dynamic;
_dynamic = new int [10];
std::cout<<"_static="<<_static<<" &_static="<<&_static<<" &_static[0]="<<&_static[0]<<std::endl;
std::cout<<"_dynamic="<<_dynamic<<" &_dynamic="<<&_dynamic<<" &_dynamic[0]="<<&_dynamic[0]<<std::endl;
return 0;
}
上記のプログラムの場合、予想される行で同じアドレス_static
を返します。&_static[0]
ただし、&_static
も他の 2 つと同じアドレスを返します。
したがって、同じ番号 (または任意の名前のアドレス)_static
を&_static
参照してください。予想どおり、異なる場所_dynamic
を示します。&_dynamic
では、なぜ C 標準は同じ場所を参照する必要がある_static
と述べたのでしょうか。&_static
紛らわしいですね。私が感じる理由の1つは&_static
、あまり意味がないということです。しかし、その使用法は代わりにエラーとして報告されるべきではありませんか?
誰かがこの混乱を手伝ってくれませんか?