데이터 분석가 몽구리

[C언어] 포인터 본문

C

[C언어] 포인터

데분몽굴 2024. 8. 1. 16:26

주소 연산자 : &

주소라 하면 변수가 할당된 메모리 공간의 시작 주소를 의미합니다. 주소 연산자 &를 사용해서 시작주소를 구합니다.

#include <stdio.h>

int main(void)
{
    int a;
    double b;
    char c;

    printf("int형 변수의 주소: %u\n", &a);
    printf("double형 변수의 주소: %u\n", &b);
    printf("char형 변수의 주소: %u\n", &c);

    return 0;
}

int형 변수는 980번지부터 983번지까지 4바이트에 할당되었을 겁니다.
double형 변수는 016번지부터 023번지까지 8바이트가 할당되었으며 char형변수는 044번지 한 바이트에 할당되었을 것입니다.

포인터와 간접 참조 연산자: *

#include <stdio.h>

int main(void)
{
    int a;
    int* pa;

    pa = &a; //포인터에 a의 주소 대입
    *pa = 10;

    printf("포인터로 a 값 출력 : %d\n", *pa);
    printf("변수명으로 a값 출력: %d\n", a);


    return 0;
}

int *pa 는 포인터를 선언하는 부분입니다. 포인터의 자료형은 변수의 자료형을 적습니다.
예를 들어 int 형 변수의 주소를 저장하면 int를 사용하고 double형 변수의 주소를 저장하면 double을 사용합니다.

여러 가지 포인터 사용해보기

#include <stdio.h>

int main(void)
{
    int a = 10, b = 15, total;
    double avg;
    int* pa, * pb;
    int* pt = &total;
    double* pg = &avg;

    pa = &a;
    pb = &b;

    *pt = *pa + *pb;
    *pg = *pt / 2.0;

    printf("두 정수의 값: %d, %d\n", *pa, *pb);
    printf("두 정수의 합: %d\n", *pt);
    printf("두 정수의 평균: %.1lf\n", *pg);

    return 0;
}

const를 사용한 포인터

const 예약어를 포인터 사용하면 가리키는 변수의 값을 바꿀 수 없다는 의미로, 변수에 사용하는 것과는 다른 의미를 가집니다.

#include <stdio.h>

int main(void)
{
    int a = 10, b = 20;
    const int* pa = &a;

    printf("변수 a 값: %d\n", *pa);
    pa = &b;
    printf("변수 b값: %d\n", *pa);
    pa = &a;
    a = 20;
    printf("변수 a값: %d\n", *pa);

    return 0;
}

pa는 const의 사용과는 무관하게 변수의 b의 주소를 저장하고 그 값을 간접 참조하여 출력하고 있습니다
포인터 사용되는 const는 pa가 가리키는 변수 a는 pa를 간접 참조하여 바꿀 수 없다는 것입니다. 만약 *pa=20;과 같이 a값을 바꾸고자 한다면
에러메시지를 출력하게 됩니다.

'C' 카테고리의 다른 글

[C] 문자열과 포인터  (0) 2024.09.11
[C언어] 문자열과 포인터  (0) 2024.09.11
[C언어]숫자 형식의 문자열 처리  (0) 2024.04.22
[C언어] 문자열 함수 정리  (0) 2024.04.17