[혼공학습단] 혼자 공부하는 C언어 6주차

CE의 velog·2025년 2월 23일
0

[chapter 09 포인터]

09-1 포인터의 기본 개념

  • 메모리의 주소
    -프로그램이 사용하는 메모리의 위치를 주소 값으로 식별
    -메모리의 위치를 식별하는 주소 값은 바이트 단위로 구별
    int a;
    4바이트 전체를 a라는 이름으로 사용
  • 주소 연산자 (&변수명)
    -주소는 변수가 할당된 메모리 공간의 시작 주소 (시작 주소를 알면 그 위치부터 변수의 크기만큼 메모리를 사용)
    -시작 주소를 확인하고 변수의 크기를 알아내면 변수가 메모리의 어디서부터 어디가지 할당되었는지 확인 가능
    int형 변수a의 주소 : 2750392
    => 변수 a는 2750392~2750395번까지 4바이트에 할당
  • 포인터와 간접 참조 연산자 (=포인터 연산자)
    포인터는 변수의 메모리 주소를 저장하는 변수, 변수처럼 선언하고 사용
    int *pa;
    자료형 *변수명;	// 주소 위치에 있는 변수의 자료형 사용
    포인터(pa)가 어떤 변수(a)의 주소를 저장한 경우 '가리킨다'로 표현
    pa -> a : 포인터pa로 변수a로 사용가능
    포인터가 가리키는 변수를 사용 시 포인터 연산자(*) 사용
  • 여러 가지 포인터 사용하기
  • const를 사용한 포인터
    const 예약어를 포인터에 사용하면 이는 가리키는 변수의 값을 바꿀 수 없다는 의미, 대표적인 예로 문자열 상수를 인수로 받는 함수

09-2 포인터 완전 정복을 위한 포인터 이해하기

  • 주소와 포인터의 차이
    -주소는 시작 주소 값 자체, 포인터는 값을 저장하는 또다른 메모리 공간 (포인터는 다른 주소를 대입해 그 값을 바꿀 수 있고, 주소는 상수이므로 대입연산자 왼쪽에 올 수 없음)

  • 주소와 포인터의 크기
    모든 주소와 포인터는 가리키는 자료형과 상관없이 그 크기가 같다는 것
    (sizeof 연산자로 확인)

  • 포인터의 대입 규칙
    포인터는 가리키는 변수의 형태가 같을 때만 대입

    // 오류 발생 코드 (변수 p와 pd는 자료형이 다르다)
    #include <stdio.h>
    
    int main(void)
    {
        int a = 10;		// 고치기: double a = 10.0으로 고치면 실행 결과가 10.00000으로 나옴
        int* p = &a;
        double* pd;
    
        pd = p;
        printf("%lf\n", *pd);
    
        return 0;
    }
  • 포인터를 사용하는 이유
    메모리에 직접 접근하는 경우나 동적할당한 메모리를 사용하는 경우에는 포인터가 반드시 필요함

  • 기본 숙제: 포인터의 핵심 내용을 정리하고 공유
    => 블로그 내용

  • 추가 숙제: 도전 실전 예제

0개의 댓글

관련 채용 정보