포인터와 다중포인터
, 조 성진님이 작성포인터를 공부하다보니 궁금한게 생겨서 질문드립니다.
int num1 = 10;
int *numPtr = &num1;
int **nPtr = &numPtr;
이런식으로 포인터를 여러번 선언할수 있는데 실제로 numPtr을 선언하지 않더라도 num1에 &를 찍으면 주소가 존재하는데 그러면 변수 하나를 선언하면 이 변수의 주소값은 어딘가에 존재하고, 이변수의 주소를 가르키는 주소값은 메모리의 어딘가에 존재하고, 계속하다보면 변수하나만 선언해도 모든 메모리를 차지할 수 있을것 같다고 생각을 했는데요. 혹시 잘못된 생각인가요?
물론 변수하나를 선언했을시 모든메모리가 잡힌다는게 잘못된 생각인건 무조건 맞는거같은데 왜그런지는 잘 이해가안갑니다.
Re: 포인터와 다중포인터
, 도장_ 관리자님이 작성일반 변수나 포인터 변수나 모두 메모리 공간을 차지합니다.
int a;
정수 선언도 공간을 차지하고
int *b;
포인터 선언도 공간을 차지합니다.
결국 둘 다 변수이고, 변수는 값을 담고 있습니다. 그 값이 정수이거나 포인터로 선언되었으니 주소를 값으로 저장하고 있거나의 차이뿐입니다.
C 언어는 블록 범위에서 최대 511개를 선언할 수 있지만, 이는 C 언어 표준의 권고안이고, 최소한 이 정도는 지원해야 한다는 뜻입니다. 정확한 범위는 컴파일러마다 다를 것입니다. 보통은 사용할 수 있는 메모리 공간만큼 변수를 선언할 수 있습니다.
그러나 저렇게 많은 변수를 선언한다는 것은 뭔가 심각하게 잘못되었다는 뜻입니다. 리눅스 커널조차 한 블록에 변수를 511개나 선언하는 일은 없습니다.