예전것/프로그래밍2009. 6. 25. 18:56

1. int *np
 - int형 포인터 변수로 4byte이고 int형 주소를 저장.
2. int **npp
 - 2차원포인터 변수로 4byte이고 1차원 포인터 변수의 주소를 저장
3. int arr[3]
 - int형 배열로 int 형 메모리 3개를 갖는 12 byte 메모리이다.
4. int arr[2][3]
 - 2차원 배열
5. int *arr[3]
 - int형 주소를 3개까지 저장하는 배열로 각 배열요소(arr[0] , arr[1] arr[2]) 가 int형 주소를 저장.
6. int (*arr)[3]
 - arr은 포인터 변수로 4byte이며 2차원 배열과 같은 열의 개수가 [3]인 int형 배열의 시작주소를 저장하기 위해 사용된다. 포인터 변수이므로 4byte이다.
 사용 예)

#include < stdio.h >
void main()
{
int arr2[2][3] = {{10,20,30}, {100,200,300}};
            int (*arr)[3];

arr = arr2;
            
 }
arr[0][0] ~ arr[1][2] 로 값 접근이 가능하다.

7. int (*arr)[2][3]
 - arr은 3차원 배열의 주소를 저장하기 위한 포인터 변수로 행과 열의 개수가 [2][3]인 int형 3차원 배열의 주소를 저장한다. 포인터 변수이므로 4byte

사용 예)

#include<stdio.h>
void main()
{
     int arr3[2][2][3]={{{10,20,30,{40,50,60}},{{70,80,90},{100,110,120}}};
     int (*arr)[2][3];
   
     arr = arr3;
}
arr[0][0][0]  ~ arr[1][1][2]로 접근이 가능하다

8. int (*arr[2])[3]
 - 같은 변수를 배열로 2개 선언한 것이다. 배열요수 (arr[0], arr[1])은 열의개수가 [3]인 int형 2차원 배열의 시작 주소등을 저장한다.

int iarr1[2][3] = {{21,22,23}, {24,25,26}};
int iarr2[3][3] = {{31,32,33}, {34,35,36}, {37,38,39}};

arr[0] = iarr1;
arr[1] = iarr2;

이렇게 해서
arr1[0][0][0] ~ arr[0][1][2] 까지 iarr1이되고
arr[1][0][0] ~ arr[1][2][2] 까지 iarr2가된다..

9. int *(*arr)[3] - 2차원 배열의 주소를 저장하는 포인터

int n1 = 10, n2=20,n3=30,n4=40,n5=50,n6=60,n7=70,n8=80,n9=90;
int *iarr1[2][3] = {{&n1,&n2,&n3}, ,{&n4,&n5,&n6};
int *iarr2[3][3] = {{&n1,&n2,&n3}, {&n4,&n5,&n6}, {&n7,&n8,&n9}};
int *(*arr)[3];

arr = iarr1; //여기서는 arr이 iarr1의 값에 *arr[0][0] ~ *arr[1][2]이렇게 접근가능..

arr = iarr2; //여기서는 arr이 iarr1의 값에 *arr[0][0] ~ *arr[2][2]이렇게 접근가능.. 배열은 주소를 저장하고있다.
10. int *func(); - int의 주소를 반환한다는 뜻..

#include<stdio.h>
int n =20;
int* func()
{
    return &n;
}
void main()
{
   int *np;
   np = func();

   printf("%d %d\n", n, *np);
}

11. int (*func)()
#include<stdio.h>
int function1()
{
   puts("함수 1입니다.");
   return 1;
}
int function2()
{
   puts("함수 2입니다.");
   return 2;
}
void main()
{
   int (*func)();
   
   func = function1;
   printf("%d\n", func());
   func = function 2;
   printf("%d\n", func());
}
func는 포인터 변수로 4byte이며 함수의 주소를 저장한다.

12. int (*func[2])()
 - 함수의 주소를 저장하는 배열로 크기가 2라서 8byte(정수형)이며, 각배열의 요소 func[0] func[1]는 함수의 주소를 저장한다.
#include<stdio.h>
int function1()
{
   puts("함수 1입니다.");
   return 1;
}
int function2()
{
   puts("함수 2입니다.");
   return 2;
}
void main()
{
    int (*func[2])();
   
    func[0] = function;
    printf("%d\n",func[0]);
    func[1] = function;
    printf("%d\n", func[1]);
}