산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C 포인터 완벽 가이드: 타입, 사용법, 모범 사례

C에서 포인터(Pointer)란?

포인터는 다른 변수의 메모리 주소를 저장하는 변수입니다. 주소를 참조함으로써 포인터는 가리키는 데이터에 간접적으로 접근하거나 수정할 수 있습니다. 이 간접 참조는 큰 데이터 구조나 동적 메모리 할당을 다룰 때 특히 효율적인 메모리 사용과 빠른 실행을 가능하게 합니다.

C에서 포인터 사용법

정수 변수 v를 고려해 봅시다:

int v = 0;
값은 0이지만, 모든 변수는 고유한 주소도 가집니다. 주소 연산자(&)로 이 주소를 구할 수 있습니다:
printf("Address of v: %p\n", (void*)&v);
출력된 주소는 무작위 16진수처럼 보이며 실행마다 다를 수 있습니다.

아래는 포인터가 주소를 저장하는 방법을 보여주는 간단한 프로그램입니다:

#include <stdio.h>
int main() {
    int v = 0;
    int *y = &v; // y는 v의 주소를 가짐
    printf("Address stored in y: %p\n", (void*)y);
    printf("Value pointed to by y: %d\n", *y);
    return 0;
}

일반적 출력:

Address stored in y: 0x7ffeefbff5c8
Value pointed to by y: 0

포인터 선언

포인터 선언 패턴:

데이터_타입 *포인터_이름;
여기서 데이터_타입은 포인터가 참조할 데이터 타입입니다. 유효한 예시:

int *ptr_int;     // int 포인터
double *ptr_double; // double 포인터
char *ptr_char;   // char 포인터

포인터 초기화

선언 후 포인터는 유효한 주소로 초기화되어야 합니다. 초기화되지 않은 포인터 사용은 미정의 동작을 유발합니다. 초기화 문법:

포인터 = &변수;
예시:
#include <stdio.h>
int main() {
    int a = 10;
    int *p = &a;
    printf("Address in p: %p\n", (void*)p);
    printf("Value via p: %d\n", *p);
    return 0;
}

C 포인터 유형

직접 접근 vs 간접 접근

직접 접근은 변수명을 직접 사용; 간접 접근은 포인터 사용. 예시:

#include <stdio.h>
int var = 1;
int *ptr = &var;
printf("Direct: %d\n", var); // 1
printf("Indirect: %d\n", *ptr); // 1
*ptr = 48; // 포인터로 수정
printf("After change, indirect: %d\n", *ptr); // 48

포인터 연산(Pointer Arithmetic)

포인터가 배열 요소를 가리킬 때 정수 더하기/빼기는 바이트가 아닌 요소 수만큼 포인터를 이동시킵니다. 예시:

int arr[5] = {1,2,3,4,5};
int *p = arr; // arr[0] 가리킴
for (int i = 0; i < 5; ++i) {
    printf("%d\n", *p);
    ++p; // 다음 요소로 이동
}

핵심 규칙:

포인터와 배열

포인터는 배열 요소 순회에 간결한 방법을 제공:

int a[5] = {1,2,3,4,5};
int *p = a; // &a[0]과 동일
for (int i = 0; i < 5; ++i) {
    printf("%d\n", *p++); // 1부터 5까지 출력
}

포인터와 문자열

문자열은 널 문자로 끝나는 char 배열. 포인터 조작으로 문자열 순회가 간단해짐:

#include <stdio.h>
#include <string.h>
int main() {
    char str[] = "Hello Guru99!";
    char *p = str;
    printf("First character: %c\n", *p);
    ++p;
    printf("Next character: %c\n", *p);
    // 전체 문자열 출력
    for (int i = 0; i < strlen(str); ++i) {
        printf("%c\n", *p++);
    }
    return 0;
}

포인터의 장점

잠재적 함정

핵심 요약

C 언어

  1. C# 변수와 기본 데이터 타입 완벽 가이드
  2. C 사용자 정의 함수 4가지 검증된 패턴
  3. C 포인터 마스터하기: 실전 중심 전문가 가이드
  4. C++ 포인터 완전 정복: 개념, 예제, 실전 활용
  5. 3D 프린팅 이해: 원리, 종류, 주요 응용
  6. Java 변수 타입 이해: 종합 가이드
  7. C 포인터 마스터: 기초부터 포인터 연산, 배열/함수 포인터, 동적 할당까지
  8. C++ 변수 타입 완벽 이해: 메모리, 범위, 연산
  9. 파이썬 변수 타입: 데이터 타입 이해와 활용
  10. 용접(Welding) 완벽 가이드: 정의, 종류, 작동 원리, 응용 분야