친구들 나는 포인터 프로그램으로 놀고 있었고 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
도 다른 두 주소와 동일한 주소를 반환합니다.
따라서 _static
과 &_static
은 같은 번호 (또는 주소)를 의미합니다. 예상대로, _dynamic
및 &_dynamic
은 다른 위치를 나타냅니다.
그래서 C 표준에서 _static
과 &_static
은 같은 위치를 참조해야한다고 말한 이유는 무엇입니까? 혼란스러워 보입니다. 내가 느끼는 한 가지 이유는 &_static
은별로 의미가 없다는 것입니다. 그렇다면 사용 대신 오류로보고하지 않아야합니까?
누군가이 혼란을 도와 줄 수 있습니까?
포인터로 배열 ** 붕괴 ** 때문에. '_static'은 출력을위한 첫 번째 요소에 대한 포인터로 붕괴합니다.'char *'(문자열을 출력하는 곳)처럼'int *'에 과부하가 없기 때문에'int *' 대신 사용됩니다. 그러므로'_static'은 첫 번째 요소 나'& _static [0]'에 대한 포인터의 값을 출력합니다. – chris
이 게시물에 관심이있을 수 있습니다 http://stackoverflow.com/questions/4810664/how-do-i-use-arrays-in-c 여기서 모든 정보를 배울 수 있습니다. –
힉스 보손 (Higgs bosons)이 부식되면서 배출 되는가? –