ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 포인터
    c언어 기초 2017. 4. 1. 17:29

    1. 포인터란? - 주소값을 저장하는 변수

    포인터란 메모리의 번지 주소이다.

    포인터 변수는 메모리의 주소를 가지는 변수이다.

    포인터 변수의 크기는 4byte의 부호없는 정수형이다.

    포인터는 첫번째 바이트의 주소값만 저장

    포인터 변수 출력은 %p를 이용 


    포인터 연산자

    &는 변수의 메모리 주소를 출력하는 연산자이다.

    *는 주소를 이용하여 변수값을 접근하는 연산자이다.


    간접참조 연산자(역 참조 연산자)

    * : 피연산자의 메모리에 접근하라는 뜻

    즉 메모리에 접근해서 주소값을 저장해 가는 변수! 변수처럼 값을 저장하기 위한것! 


    int *p // 메모리에 접근가능한 변수가 됨

    p = &num //포인터가 변수 num 주소값을 저장함

    *p = 123 // 변수 num에 123을 대입


    int *ptr1 = &num1 // 선언과 동시에 초기화 

    char *ptr2 = &num2 // 선언과 동시에 초기화 

    double *ptr3 = &num3 // 선언과 동시에 초기화 


    - 포인터형으로 데이터를 출력할때 서식문자 %p를 통해 주소값을 쉽게 표현 할 수있다.

    printf("num1의 저장위치 : %p \n",ptr1);
    printf("num2의 저장위치 : %p \n",ptr2);
    printf("num3의 저장위치 : %p \n",ptr3);

    - %#x 는 맨 앞에 0x로 출력, %p 로 하면 맨앞에 00으로 출력되여 결과가 약간 다름




    Call by Reference




    포인터에서 캐스팅 연산자 () 


    int i;

    double *ptr = &i;  // int형 변수의 주소값을 double형 포인터가 저장하는데, &i 주소값이 더블형으로 변환

    이럴때 강제형 변환은 캐스팅 연산자 () 를 이용


    int i;

    double *ptr = (double *)&i; 




    포인터 연산


    1. *ptr++ 

    => 순서 ① * 간접참조를 한다.

                ② ++ 후위 증가를 한다. 


    #include<stdio.h>

    int main() {

    int arr[] = {10,20,30,40,50};

    int arrlen = sizeof(arr) / sizeof(int);

    int i, *ptr;


    ptr = arr;


    for (i = 0; i < arrlen; i++)

    printf("%d \n", *ptr++);


    getch();

    return 0;

    }

     결과 

    10

    20

    30

    40

    50



    #include<stdio.h>

    int main() {

    int arr[] = {10,20,30,40,50};

    int *ptr = arr; 

    int sum = 0;


    while (*ptr)

    sum += *ptr++;


    printf("배열 arr 요소들의 합 : %d ", sum);


    getch();

    return 0;

     결과




    #include <stdio.h>

    int main(void) { int a = 100; char b = 'M'; double d = 1.34; int* ap = &a; // ap = &b; 경고 발생 puts(" \n void 포인터(pointer) \n"); printf(" a = %3d, &a = %d \n", a, &a ); printf(" b = %3c, &b = %d \n", b, &b ); printf(" d = %.1f, &d = %d \n", d, &d ); printf(" *ap = %3d, ap = %d, &ap = %d \n\n", *ap, ap, &ap); return 0; }

     결과 

    a=100, &a=6487724

    b= M, &b=6487728

    d=1.3, &c=6487732

    *ap=100, ap=6487724, &ap=6487708


    'c언어 기초 ' 카테고리의 다른 글

    file 입출력 - 단어찾기  (0) 2017.04.21
    scanf 숫자이외의 입력이 있으면 다시 입력받게  (0) 2017.04.18
    1차원 배열  (0) 2017.03.30
    재귀 함수  (0) 2017.03.28
    함수의 정의와 선언  (0) 2017.03.28

    댓글

Designed by Tistory.