|
타이라 님이 쓰신 글 :
: 안녕하세요.
: 제가 드리고 싶은 질문은 C언어에서
:
: int(*Ptr)[3] 과 int*(Ptr[3]) 의 차이점을 좀 가르쳐주세요
:
: 그리구 가능하시다면 차이를 확인할수 잇는 간단한 예제나 프그램을 보여주시면
:
: 감사하겠습니다.
1. int(*Ptr)[3]
int [3]을 가리키는 포인터 Ptr.
즉, 배열(int 형 자료 3개를 갖음)을 가리키는 포인터 Ptr
2. int*(Ptr[3])
이는 int *Ptr[3]과 같음.
배열 Ptr이며 이 배열은 int* 형 자료 3개를 갖음. 즉, int 포인터 배열임.
#include<stdio.h>
#pragma argsused
int main(int argc, char* argv[])
{
int ia[2][3]={{0,1,2},{7,8,9}};
int (*Ptr1)[3];
int* (Ptr2[3]);
printf("\n%d %d %d",ia[0][0],ia[0][1],ia[0][2]); //0 1 2
//Ptr1=ia;로 하면 ia 대신 Ptr1을 사용할 수도 있습니다. 보통 함수에 매개변수로 넘겨줄 때 그렇게 합니다.
Ptr1=&ia[0];
printf("\n%d %d %d",Ptr1[0][0],Ptr1[0][1],Ptr1[0][2]); //0 1 2
++Ptr1[0][0]; ++Ptr1[0][1]; ++Ptr1[0][2];
printf("\n%d %d %d",ia[0][0],ia[0][1],ia[0][2]); // 1 2 3
Ptr1=&ia[1];
printf("\n%d %d %d",ia[1][0],ia[1][1],ia[1][2]); //7 8 9
printf("\n%d %d %d",Ptr1[0][0],Ptr1[0][1],Ptr1[0][2]); //7 8 9
Ptr2[0]=&ia[0][0];
Ptr2[1]=&ia[0][1];
Ptr2[2]=&ia[0][2];
printf("\n%d %d %d",*Ptr2[0],*Ptr2[1],*Ptr2[2]); // 1 2 3
++*Ptr2[0];
++*Ptr2[1];
++*Ptr2[2];
printf("\n%d %d %d",ia[0][0],ia[0][1],ia[0][2]); // 2 3 4
Ptr2[0]=&ia[0][1];
Ptr2[1]=&ia[0][2];
Ptr2[2]=&ia[0][0];
printf("\n%d %d %d",*Ptr2[0],*Ptr2[1],*Ptr2[2]); // 3 4 2
return 0;
}
|