현재 C를 배우고 있으며 메모리 레이아웃과 포인터에 대해 혼란스러워합니다.C에서 스택 대 힙 포인터
다음 코드에서 배열은 스택에 할당된다는 것을 이해합니다.
#include <stdio.h>
int main() {
int x[4];
x[0] = 3; x[1] = 2; x[2] = 1;
printf("%p\n",x);
printf("%p\n", &x);
}
제 질문은 왜 두 개의 출력 호출이 같은 값을 출력합니까?
malloc (힙에 할당)을 사용하여 유사한 스 니펫을 시도했는데 값이 다릅니다.
#include <stdio.h>
#include <stdlib.h>
int main() {
int *x = malloc(sizeof(int) * 4);
x[0] = 3; x[1] = 2; x[2] = 1;
printf("%p\n",x);
printf("%p\n", &x);
}
[배열의 주소가 C의 값과 어떻게 다릅니 까?] (http://stackoverflow.com/questions/2528318/how-come-an-arrays-address-is-equal-to- C 값) – Sneftel
C는 자동 변수에 대해 스택을 사용할 필요가 없습니다. 구현에 따라 다릅니다. 그리고 배열은 포인터가 아닙니다. – Olaf
@Olaf 모든 구현체가 스택에 특별히 할당하는 한 구현에 따라 다릅니다 .-)). –