본문 바로가기
01.Bit 단기/C

16_포인터배열

by chojju 2018. 4. 28.
반응형

#include <stdio.h>

//배열의 이름은 주소값이다.
//단, 상수이다.
void exam1()
{
 int arr[3] = { 1, 2, 3 };
 int arr1[3] = { 11, 22, 33 };

 // arr = arr1;  // 배열의 이름을 L-value에 사용?  불가능...
 // 배열의 이름은 저장공간을 가리키는 개념이 아니라
 // 배열 구조 전체의 주소를 가리키는 개념이다.
 //==============================================================
 *arr = arr1[0];// *arr = 11;  // *arr은 R-value에 사용?
 *(arr + 1) = 22;  //???
       // (*arr) + 1 = ;//  절대 불가능 (*arr) + 1 의 결과는 숫자이기때문
}

//배열 포인터
//배열의 주소를 포인터 변수에 대입하면
//배열의 이름을 이용한 연산과 포인터변수를 이용한 연산의 결과는 동일하다
void exam2()
{
 int arr[5] = { 1, 2, 3, 4, 5 };
 int *parr = arr;
 printf("%d : %d\n", arr, parr);    //952

            // arr를 +1 이동한 역참조
 printf("%d : %d\n", arr[1], parr[1]);  //2,2
 printf("%d : %d\n", *(arr + 1), *(parr + 1)); //2,2
}

//2차원 배열과 포인터
void exam3()
{
 int arr[3][4] = { { 1, 2, 3, 4 },   //924
 { 5, 6, 7, 8 },   //940
 { 9, 10, 11, 12 } }; //956

 printf("%d\n", arr);  //924(2)
 printf("%d\n", arr + 1); //940(2)
 printf("%d\n", (*arr) + 1); //928(1)

 printf("%d\n", arr[0] + 1); //928(1)
 printf("%d\n", arr[0][0] + 1); // 1 + 1 = 2(산술연산)

 printf("%d\n", *(arr[1] - 3)); // 1) arr + 1 이동한 역참조 : 940
         // 2) -3 이동    : 928
         // 3) 역참조    :2(0)

 printf("%d\n", arr[1][-3]);  // 위 코드와 동일
}

//2차원 배열과 포인터
void exam4()
{
int arr[3][4] = { { 1, 2, 3, 4 },   //924
{ 5, 6, 7, 8 },   //940
{ 9, 10, 11, 12 } }; //956

//열의 크기가 다르기 때문에 잘못된 연산이다...
// int **pp = arr;  // int 2차 = int  2차  ** = (*)[4]
// printf("%d\n", pp + 1); //4byte 이동

//포인터 변수 선언시 열의 크기를 지정해야 한다.
int (*p)[4] = arr;  // (*)[4] = (*)[4]
// p 몇차원포인터일까? 2차원....

printf("%d : %d : %d\n", p, *p, **p); //924,924,1

printf("%d : %d : %d\n", **(p + 1), p[1][0], p[2][-4]);
}

int main(void)
{
 int *pt;
 int(*pa)[3];  //포인터,열의 크기가 3인 2차원 배열 주소
 int arr1[2][3];
 int arr2[3][2];
 int **p2;  //  int ***p3,


 exam4();

 return 0;
}

 

 

반응형

'01.Bit 단기 > C' 카테고리의 다른 글

18_함수포인터  (0) 2018.04.28
17_포인터  (0) 2018.04.28
15_배열  (0) 2018.04.28
14_함수의인자전달  (0) 2018.04.28
13_함수실습  (0) 2018.04.28

댓글