공부해요/C

[ 열혈강의 C언어본색 ] Part2 제3장 포인터란 무엇인가

예쁜꽃이피었으면 2014. 8. 14. 17:30

3.1 포인터란

           - 포인터 변수란 메모리 공간의 주소를 저장하는 변수이다.

           - 변수 이름 앞에 &연산자를 붙이면 해당 변수의 시작 주소를 반환

           - 포인터 변수가 저장하는 변수의 주소에 저장된 값을 참조하려면 *연산자를 사용

 

3.2 포인터 변수의 선언과 사용

                      Int*       pointer    =    NULL;

                 자료형   포인터변수이름   널포인터설정

           *NULL포인터는 포인터 변수에 아무 주소도 저장하지 않겠다는 의미이다. NULL포인터를 사용할 때는

대문자로 써야 한다.

           - 포인터 변수에 어떤 변수의 주소를 저장하느냐에 따라 간접 접근하는 대상이 바뀐다.

           (*&*&a &*&a와 같은 코드의 해석 :

*&는 서로 상쇄되기 때문에 *&*&a == a 이고 &*&*a == &a가 성립된다.)

3.2.3 잘못 사용된 포인터

           - 포인터 변수에 주소를 저장하지 않은 경우

           - 포인터 변수에 임의로 주소를 저장(초기화)한 경우

 

3.3 다차원 포인터 변수의 선언과 사용

           - 1차원 포인터 변수의 선언은 자료형 다음에 * 연산자를 한 개 붙이고,

            2차원 포인터 변수의 선언은 자료형 다음에 * 연사자를 두 개 붙이고,

            3차원 포인터 변수의 선언은 자료형 다음에 * 연산자를 세 개 붙인다.

           (1차원 : int* p1 = NULL;

2차원 : int** p2 = NULL;

3차원 : int*** p3 = NULL;)

-      다차원 포인터 변수란 포인터 변수의 주소를 저장하는 변수이다.

: 1차원 포인터 변수는 일반 변수의 주소를 저장하는데

 2차원 포인터 변수는 1차원 포인터 변수의 주소를 저장한다.

3차원 포인터 변수는 2차원 포인터 변수의 주소를 저장한다….

           3.3.1 다차원 포인터 변수의 사용

            Colored By Color Scripter

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

 

#include <stdio.h>

int main( )

{

        char c1='A';

        char* cp=NULL;

        char** cpp=NULL;

        

        cp=&c1;

        cpp=&cp;

        

        printf("%c %x %x \n", c1, cp, cpp);        //  변수에 저장된 데이터 출력

        printf("%x %x %x \n", &c1, &cp, &cpp);    //  변수의 주소 출력

        printf("%c %c %c \n", c1, *cp,**cpp);    // 문자 A 출력

                

        return 0;

}

 

           14행에

-      *cp의 의미

: 1차원 포인터 변수 cp &c1(변수 c1의 주소 , 12ff63)이 저장되어서 *cp == *&c1이 성립.

 *&을 상쇄하면 c1만 남는다. 결국 *cp == c1이다

           -  **cp의 의미

: 2차원 포인터 변수 cpp &cp(cp메모리의 주소, 12ff54)가 저장되어서 **cpp == **&cp와 같다. *&는 서로 상쇄되므로 *cp만 남는다. 다시 1차원 포인터 변수 cp  &c1을 저장하여서 *cp == *&c1이 성립되고 *&는 서로 상쇄되므로 결국, *cp == c1이 되고 **cpp == *cp ==c1이 된다.

 

3.4 주소의 가감산

           : c언어에서 배우는 자료형은 모두 주소를 가지며 주소의 가감산이 가능하다. 가각의 주소를 가감산하면

자료형의 크기에 따라 결고가 다를 수 있다.

*(array + i) == array[i] == *&array[i]

 

3.4 함수 포인터

           - 함수 이름은 함수의 시작 주소이다.

           - 함수 포인터란 함수의 시작 주소를 저장하는 변수이다.

                      선언 : int (*pointer)(int,int)


C언어본색 Part2 제3장 포인터란 무엇인가.docx



반응형