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

C 프로그래밍: 주소와 포인터를 함수에 전달하기 – 실전 가이드

C 프로그래밍: 주소와 포인터를 함수에 전달하기

C 언어에서 메모리 주소와 포인터를 함수에 전달하는 방법을 명확한 예제와 전문가 설명으로 마스터하세요.

C에서 값 대신 주소를 전달하면 함수가 원래 변수를 직접 조작할 수 있습니다. 이 기법을 포인터 전달(pointer passing)이라고 하며, 효율적인 코드와 범위를 넘어선 데이터 수정에 필수적입니다.

예제 1: 참조에 의한 두 정수 교환

#include <stdio.h>
void swap(int *n1, int *n2);
int main(void) {
    int num1 = 5, num2 = 10;
    /* num1과 num2의 주소 전달 */
    swap(&num1, &num2);
    printf("num1 = %d\n", num1);
    printf("num2 = %d", num2);
    return 0;
}
void swap(int *n1, int *n2) {
    int temp = *n1;
    *n1 = *n2;
    *n2 = temp;
}

이 프로그램을 실행하면:

num1 = 10
num2 = 5

swap() 함수는 원래 num1과 num2 변수를 가리키는 포인터 n1과 n2를 받습니다. 이 포인터들을 역참조(*n1, *n2)함으로써 함수는 메모리에 저장된 실제 값을 교환하므로, main()에서 업데이트된 숫자를 볼 수 있습니다. swap()이 void를 반환하는 이유는 인자를 직접 수정하기 때문입니다.

예제 2: 포인터를 통한 값 증가

#include <stdio.h>
void addOne(int *ptr) {
    (*ptr)++; /* 주어진 주소의 값 증가 */
}
int main(void) {
    int i = 10;
    int *p = &i;
    addOne(p);
    printf("%d", *p); /* 11 출력 */
    return 0;
}

여기서 p는 i의 주소를 가집니다. addOne() 함수는 같은 주소를 받아 역참조하고 내부 값을 증가시킵니다. 호출 후 *p(따라서 i)는 새로운 값 11을 반영합니다.

이 예제들은 포인터 전달의 강력함을 보여줍니다: 함수는 자신의 범위 밖에서 정의된 변수를 변경할 수 있어, 불필요한 복사 없이 효율적인 데이터 조작이 가능합니다.

C 언어

  1. C# 키워드와 식별자 이해: 규칙, 목록, 모범 사례
  2. C# 비트 연산자와 시프트 연산자 완전 정복: 종합 가이드
  3. C# 클래스와 객체: 견고한 OOP를 위한 기초 다지기
  4. C# 추상 클래스와 추상 메서드: 실전 가이드
  5. C# partial 클래스와 partial 메서드 이해하기
  6. C# sealed 클래스와 메서드: 상속/오버라이딩 제한으로 코드 안전성·성능 높이기
  7. C 언어에서 1차원 및 2차원 배열을 함수에 전달하는 방법 – 실전 가이드
  8. C 포인터 마스터하기: 실전 중심 전문가 가이드
  9. C 언어에서 배열과 포인터의 관계 이해하기
  10. C 구조체와 포인터 마스터하기: 실전 가이드