이중포인터에 대한 질문입니다.
글쓴이: 이소희 / 작성시간: 화, 2005/04/26 - 1:34오후
제가 이중포인터를 아는정도는,
아래처럼 사용한다는 것과,
포인터의포인터라는 정도입니다.
질문입니다.
아래의 TestPointer2의 **dp 파라메터는 스택에 어떤식으로 할당되고, 스택에 어떤값이 들어가게 되는건지요?
알듯 하면서도, 모르겠네요. ㅡㅡ;
#include <stdio.h> #include <malloc.h> #include <string.h> void TestPointer2(char ** dp) { *dp = (char*)malloc(32); strcpy(*dp,"xxxx"); printf("TestPointer2 : %s \n",*dp); } void main() { char * pstr_data=0; // 문자열을 저장할 포인터 TestPointer2(&pstr_data); free(pstr_data); }
:roll:
Forums:
일단 pointer값은 stack이 아니라 heap에 값이 저장이 되게
일단 pointer값은 stack이 아니라 heap에 값이 저장이 되게 됩니다.
그리고, 당연히 strcpy()에서 지정한 값이 buffer에 저장이 되게 됩니다.
stack을 이용하실려면 pointer가 아니라 array를 이용하시면 됩니다.
<어떠한 역경에도 굴하지 않는 '하양 지훈'>
#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);
[quote="서지훈"]일단 pointer값은 stack이 아니라 h
지훈님이 말씀하시는 "pointer값" 이라는 용어가 좀 혼동의 여지가 있네요.
"pointer 값" 이라는게
pstr_data 또는 dp 변수의 값을 말하는 것이라면
두 변수 모두 자동변수이므로 stack 에 저장되는게 맞겠지요.
물론 지훈님이 뜻하신대로 할당받은 공간은 heap 이 맞겠지만
혹시 char** dp 가 아니라 char* dp 였다면 스택상에서 어떤 구조, 어떤 값을 갖게 되는지 알고 계신가요?
이중pointer 라고 pointer 와 다를건 하나도 없습니다.
똑같이 스택상에 (32bit 일반 PC의 경우) 4 bytes 공간을 할당받을테고 그 공간안에는 일반값이 아니라 어떤 "변수"의 주소값을 갖고 있습니다.
단지 차이가 있다면 이중포인터의 경우는 그 "변수"가 char* 타입이고 포인터의 경우는 char 타입이겠지요.
제시하신 코드상에서 dp 는 type 이 char** 인 자동변수이므로 stack 상에 4 bytes 를 차지할테고 그 안에 pstr_data 변수의 주소값이 들어있습니다
개념없는 초딩들은 좋은 말로 할때 DC나 웃대가서 놀아라. 응?
답변감사합니다.
답변 감사드립니다.
제가 원했던 답변은 girneter님의 답변입니다.
제가 질문을 하면서, 의사 전달을 잘 못했던거 같네요 ^^
좋은 하루 되세요.
내 삶속에 던져진 나.
pointer가 복잡하게 쓰다보면 정신 없는데, 제일 쉽게 이해할 수 있
pointer가 복잡하게 쓰다보면 정신 없는데, 제일 쉽게 이해할 수 있는 방법은 typedef로 바꾸어 보면 좀 보기가 좋고 이해하기 쉽습니다.
예를 들어
char **p;
는
와 동일합니다. 이러면 위보다는 쉽게 감이오죠.
실제로 함수 포인터의 어레이의 포인터의 어레이처럼 정신없이 포인터를 쓰다보면 자기가 만든코드도 잘 이해가 가지 않는 경우도 있습니다. typedef로 잘 정리해놓으면 감도 잘올 거에요.
댓글 달기