포인터 (1)

Study/C 2014. 8. 27. 09:29

int *pnum

int num;


pnum=#


이것은 num의 레지스터 시작 주소값을 pnum에 저장하는걸 뜻함.


&연산자는 '오른쪽에 등장하는 피연산자의 주소 값을 반환하는 연산자' 이다


Tip 인트형 변수는 4Byte이다. 포인터 변수 pnum도 인트형 이므로 4Byte 이어야 하지만

32비트 표현되는 시스템과 64비트로 표현되는 시스템에 따라서 32비트는 4바이트 64비트는

8바이트로 할당된다.


포인터 변수 선언의 예

int *ptr;

int * ptr;

int* ptr;


이 3가지 경우 모두 동일한 의미를 갖는다.( *연산자의 위치는 상관이없다)


단 포인터 변수 선언시 자료형은 통일 시켜줘야 옮다. (틀려도 컴파일 에러는 안뜨지만 경고는 발생)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
 
int main()
{
    int num1=5;
    double * pnum1 = &num1;
 
    double num2=5;
    int * pnum2 = &num2;
 
    printf("pnum1 add: %d pnum1 of vaule: %d\n",pnum1,*pnum1);
    printf("pnum2 add: %d pnum2 of vaule: %d\n",pnum2,*pnum2);
    return 0;
 
}
출력 화면
pnum1 add: num1의 주소 pnum1 of voule: 5
pnum2 add: num2의 주소 pnum2 of voule: 0

이렇게 되면 int 형의 num1은 double인 포인터변수 pnum1보다 작기때문에 손실없이 출력이되었다.
하지만 double 형의 num2은 int 포인터변수인 pnum2 보다 크기 때문에 데이터 손실이 생겼다.

Tip 변수 선언의 예
int num, *pnum;



실행예제


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
 
int main()
{
    int num1=100;
    int num2=100;
    int *pnum;
 
    pnum=&num1;
    (*pnum) += 30;
 
    pnum=&num2;
    (*pnum) -= 30;
 
    printf("num1: %d,  num2: %d \n", num1,num2);
    printf("num1  Add: %p,      num2  Add: %p\n", &num1, &num2);
    pnum=&num1;
    printf("pnum1 Add: %p,      pnum1 Voule: %p\n", pnum, *pnum);
    pnum=&num2;
    printf("pnum2 Add: %p,      pnum2 Voule: %p\n", pnum, *pnum);
 
    return 0;
}
 







'Study > C' 카테고리의 다른 글

2차원 배열 (데이터 입력하기)  (0) 2014.08.27
포인터 (3) call by reference  (0) 2014.08.27
포인터 (2) 배열  (0) 2014.08.27
함수 리턴값  (0) 2014.08.26
조건식  (0) 2014.08.26
Posted by 차희빈

차희빈

달력