포인터와배열질문입니다.
마리
포인터와배열질문입니다.질문 요약 :char *pb[30] =I am a person;질문 내용 :
1.char* pb[30] = i am a person;이 문법적으로 틀렸는지와 왜 틀렸는지 모르겠습니다.
2. 포인터와 배열에 관해 공부하는 중인데 포인터에 int *p;, double *a;... 등과 같이 앞에 자료형을
붙여주는 이유와
책에서 보면 int형 포인터 변수이므로 메모리에서 4byte, double은 8byte 같이
값을 건너뛰고 할당하는데, 어떤 책이나 글에서는 우리는 32bit 컴퓨터 이므로 자료형과 관계없이 4byte
를 할당한다. 명확하게 어떠한 상황에서 2가지의 말이 맞는지 궁금합니다.^^;
-
대나무
아하.. 감사합니다^^
-
돌심장
32bit 시스템에서 주소는 4byte로 표현되기 때문에, 모든 포인터의 크기는 4byte가 됩니다.
그러면 간단하게 pointer p; 라고 하면 될 것 같은데, 이런게 가능하다면 어떠한 문제가 생길까요?
정수형 자료 n이 있는데, 포인터를 통해서 주소를 통해 n에 접근합니다. 값을 꺼내와야 하는데, 몇 byte를 읽어와야 할까요. 1,2,4byte??? 얼마인지 컴파일러가 알 수 없죠. 왜냐하면 포인터에는 단순히 주소값만 저장되어 있기 때문이죠. 그 -
좍좍
아핫.. 그러면 char *pb[30]=\i am a person\;은 나머지는pb[1]~pb[29]까지엔 NULL이 들어가겠지만 문법적으로 생각해보면 중괄호{}가 안들어가서 틀린거군요...??
2번문제도 말씀해주셨는데 그러면 근본적으론 int형이든 double형이든 4byte를 할당 받겠네용??
그리고 불러오거나 꺼내올때는 말씀하신데로 다르게 되고... 맞나요 ㅠㅠ? -
온새미로
pb는 char*를 30개 저장할 수 있는 포인터 배열입니다. 배열의 초기화는 중괄호로 되어야 하죠.
char *pb[30]={\I am a person\};
이렇게 하면 pb[0]에는 \I am a person\의 주소가 들어갑니다. 나머지 pb[1]~pb[29]까지엔 NULL이 들어가고요.
32bit 시스템에서 포인터는 전부 4byte입니다.
포인터 앞에 자료형을 붙여주는 이유는 나중에 포인터에 담겨있는 주소에서 값을 꺼내올 때 몇 바이트인지 알