C언어_포인터

P4·2023년 5월 2일
0

C언어 기초

목록 보기
17/23
post-thumbnail

포인터

  • 포인터 변수는 변수명 앞에 *을 붙여준다

  • 아래의 코드 상태에서 각 변수들의 값은?


예제코드

#include <stdio.h>

int main(void) {
	int value = 1;
    
    int *p = NULL; // 포인터 변수는 선언과 동시에 NULL값으로 초기화 시켜주는 것을 권장, 프로그램 오류 방지
   	p = &value;
    
    return 0;

}

  • 같은 열에 있는 것들은 전부 값이 같습니다.

  • &은 주소값으로 만듬, *은 주소값을 초기화한 값으로 만듬

value&value
*pp&p
결과값1value의 주소값p의 주소값

포인터를 이용한 연산

  • 아래의 코드가 실행되면 value값이 1235로 출력됨

  • 포인터로 직접 접근하면 그 값이 어디에 담겨있든 바꿔버릴 수 있음

예제코드 2 (포인터를 이용한 연산)

#include <stdio.h>

int main(void) {
    int value = 1;

    int* p = NULL; // 포인터 변수는 선언과 동시에 NULL값으로 초기화 시켜주는 것을 권장, 프로그램 오류 방지
    p = &value;

    *p = *p + 1234;

    printf("%d", value);

    return 0;
}

한눈에 복습하기

  • 아래 코드에서 예시로 넣은 6291084는 당시 코드를 실행시켰을때의 &x임

  • 주소값을 알아내서 직접 똑같이 입력해도 값을 바꿀 수 있음

  • 다만 주소값이 변하면 의미가 없으니 사용X (테스트용으로 사용해본것)


예제코드 3 (한눈에 복습하기)

#include <stdio.h>

int main(void)
{
    int x = 10;
    int *ptr = &x; // 포인터 변수 ptr은 변수 x의 주소를 저장함
    // &는 주소, *는 원래 값
    // &*ptr 이런식으로 하면 ptr출력값이랑 똑같이 나옴

    printf("주소값 : %d\n", ptr); // 포인터 변수에서 *를 때면 그게 주소값
    printf("주소를 다시 따라간 값 : %d\n", *ptr); // 이걸 붙이면 값으로 변함

    *ptr = 20;            // ptr이 가리키는 변수 x의 값을 20으로 변경함
    printf("%d\n", *ptr); // 포인터 변수 ptr이 가리키는 변수 x의 값을 출력함
    printf("%d\n", x);
    int *test = 6291084;
    *test = 50;

    printf("%d\n", x);
    return 0;

    /* 출력
    주소값 : 6291084 <-- x의 메모리 공간
    주소를 다시 따라간 값 : 10 <-- x와 같음
    20
    20
    50 <-- 만약 &x의 값을 그대로 넣는다면 그걸 넣어서도 바꿀 수 있음 (*test)
    */
}
profile
지식을 담습니다.

0개의 댓글