[C] 포인터 배열 활용을 할 때 궁금한점(?)
글쓴이: sarama / 작성시간: 일, 2005/05/01 - 11:00오후
우선 코드부터...
#include <stdio.h> int main(void) { char* arr[4]={ "first", "second", "third" }; printf ("%s \n", arr[0]); return 0; }
그리고 다음의 경우
#include <stdio.h> int main(void) { int a=10, b=20, c=30; int* arr[]={&a, &b, &c}; printf ("%d \n", *arr[0]); return 0; }
첫 코드에서 메모리 주소가 가리키는 값에 접근할 때 *표시가 없었지만 두번째 코드에서는 *가 있어야 하네요...(printf에서 *arr[0]부분이요)
제 생각으로는 포인터 배열을 선언하는 과정에서 차이가 없어 보입니다.
"first"... 형식이던 "&a"... 형식이던 모두 주소값을 리턴하고 이것에 대한 배열 형식으로 선언된다고 보기 때문입니다.
그런데 *에 따라서 달라지니 궁금합니다.
제가 잘못 생각하고 있는것이 무엇인지 설명해주실분 안계신가요?
Forums:
array of pointer to char와 array of point
array of pointer to char와 array of pointer to pointer to int의 차이, 따라서 두번째 코드에서 원하시는 바를 얻기 위해서는 pointer to를 한번 지워줄 필요가 있습니다. 여기에 '*'가 필요하죠.
1. char *arr[4] = {"first", "second", "t
1. char *arr[4] = {"first", "second", "third"};의 경우
"%s" 서식은 문자열 포인터를 인자로 취하는데 arr[0]에는 “first"로의 포인터가 들어 있으므로 * 불필요.
2. int *arr[] = {&a, &b, &c};의 경우
"%d" 서식은 int형을 인자로 취하는데 arr[0]에는 int로의 포인터(&a)가 들어 있으므로 꼭 *를 붙여야 합니다.
> "first"... 형식이던 "&a"... 형식이던 모두
> "first"... 형식이던 "&a"... 형식이던 모두 주소값을 리턴하고 이것에 대한 배열 형식으로 선언된다고 보기 때문입니다.
많은 사람들이 종종 실수하는 것 중 하나가, 포인터는 다 같은 포인터라 생각하는 것입니다. 어떤 데이터형에 대한 포인터인가를 늘 생각하면서 짜야 실수를 줄일 수 있습니다.
> array of pointer to pointer to int의 ...
int* arr[]={&a, &b, &c};
arr은 array of pointer to int 입니다. %d가 요구하는 것은 int 형입니다. arr[0]의 데이터형은 pointer to int 입니다. 따라서 여기에 *가 더 붙어 *arr[0]이 되어야 합니다.
%c 는 char 의 value, %s 는 char 의 pointer,
%c 는 char 의 value, %s 는 char 의 pointer, %d 는 int의 value 를 받는다고 생각하면 간단합니다.
댓글 달기