스택에 하나와 힙에 두 개의 배열을 선언하면 변수 이름을 인쇄 할 때 다른 동작이 발생합니다 (gdb의 경우 중요).배열의 변수 이름이 스택에 선언되지 않은 이유는 무엇입니까? C++?
int array_on_stack[5];
int * array_on_heap = new int[5];
이제 gdb에서 각 코드 행을 단계별로 실행 한 다음 변수 이름을 인쇄하여 각각에 대한 메모리 주소를 얻습니다.
print array_on_stack
print array_on_heap
하지만 array_on_stack
것은 상기 어레이의 컨텐츠가 아닌 메모리 어드레스를 출력한다. 메모리 주소를 얻으려면 명령이 필요합니다 print &array_on_stack
. 이는 array_on_stack
이 포인터가 아님을 나타냅니다. 이 두 선언의 차이점을 메모리 주소에 액세스하는 방법과 이유가 무엇인지 설명 할 수 있습니까?
위해 GDB에서 비슷한 결과를 얻을 것이다, 하나는 배열 포인터, 그리고 사람; 그들은 다른 것들입니다. – UKMonkey
* 이는 array_on_stack이 포인터가 아님을 나타냅니다. * 올바른 것입니다. 배열은 포인터가 아닙니다. 포인터는 포인터이고 배열은 배열입니다. 'int'와 마찬가지로'double'도 아닙니다. – NathanOliver