C에서 포인터 앰퍼샌드 표기법 사용

Jinku Hu 2023년10월12일
  1. &var표기법을 사용하여 주어진 변수의 주소 가져 오기
  2. 포인터에서 변수 값에 액세스하려면*ptr 표기법 사용
  3. 앰퍼샌드 표기법&를 사용하여 객체 주소를 함수에 전달
C에서 포인터 앰퍼샌드 표기법 사용

이 기사에서는 C에서 포인터 앰퍼샌드 표기법을 사용하는 방법에 대한 여러 방법을 소개합니다.

&var표기법을 사용하여 주어진 변수의 주소 가져 오기

포인터는 단순히 메모리 주소를 보유하는 변수입니다. type * var 표기법으로 선언됩니다. 포인터는 동일한 유형의 주소를 할당 할 수 있으며 모든 포인터 유형은 일반 포인터라고하는void *포인터를 저장할 수 있습니다. 객체의 주소를 저장하는 유형이 있으므로 이에 대한 액세스를 제공하는 연산자가 있어야합니다.

앰퍼샌드 기호&는 종종address-of 연산자라고하는 단항 연산자로 사용됩니다. 데이터 개체 및 함수에서 개체가 저장된 주소를 검색하는 데 사용할 수 있습니다.

다음 예제와 같이 정수x가 선언되고 초기화되었다고 가정합니다. 이 경우 앰퍼샌드 연산자&로 주소를 가져와int *xptr 변수에 할당 할 수 있습니다. 결과적으로xptr는 10233의 값을 가리키고*연산자를 사용하여 후속 코드에서 해당 값에 액세스 할 수 있습니다.

여기서 별표*는 두 가지 다른 컨텍스트에서 사용됩니다. 하나는 포인터 유형의 변수를 선언하는 것입니다. 다른 하나는 포인터에서 변수에 대한 값에 액세스하는 것입니다. 후자는 역 참조라고합니다.

#include <stdio.h>
#include <stdlib.h>

int main() {
  int x = 10233;
  int *xptr = &x;  // xptr now points to x

  printf("x: %d\n", x);
  printf("*xptr: %d\n", *xptr);

  exit(EXIT_SUCCESS);
}

출력:

x: 10233
*xptr: 10233

포인터에서 변수 값에 액세스하려면*ptr 표기법 사용

역 참조 연산자를 사용하여 포인터에서 값을 검색하여 동일한 유형의 변수에 할당 할 수 있습니다. *연산자는 정의되지 않은 동작을 초래하기 때문에null 또는 잘못된 포인터와 함께 사용할 수 없습니다. 대부분의 시나리오에서null 포인터를 시도하면 프로그램이 충돌 할 가능성이 있습니다. 그러나 유효하지 않은 포인터에 액세스하면 인식되지 않을 수 있습니다. 유효하지 않은 포인터는 메모리의 임의의 개체를 가리킬 수 있으며 이에 대한 작업은 계속 진행되지만 프로그램 상태의 정확성을 손상시킬 수 있습니다.

#include <stdio.h>
#include <stdlib.h>

int main() {
  int x = 10233;
  int *xptr = &x;  // xptr now points to x

  int y = *xptr;  // y now holds the value 10233
  printf("x: %d\n", x);
  printf("y: %d\n", y);

  exit(EXIT_SUCCESS);
}

출력:

x: 10233
y: 10233

앰퍼샌드 표기법&를 사용하여 객체 주소를 함수에 전달

주소 연산자를 사용하는 가장 일반적인 예는 객체에 대한 포인터를 함수 인수로 전달하는 것입니다. 다음 예제는 두 개의 정수 포인터를 인수로 취하는swap 함수를 보여줍니다. main 함수에서swap이 호출되면 앰퍼샌드 연산자가xy 변수의 주소를 전달하는 데 사용됩니다. 하지만swap 함수 본문의*연산자는 포인터 역 참조를 나타냅니다.

#include <stdio.h>
#include <stdlib.h>

void swap(int *x, int *y) {
  int tmp = *x;
  *x = *y;
  *y = tmp;
}

int main() {
  int x = 10233;
  int y = 10133;

  printf("x:%d, y:%d\n", x, y);
  swap(&x, &y);
  printf("x:%d, y:%d\n", x, y);

  exit(EXIT_SUCCESS);
}

출력:

x:10233, y:10133
x:10133, y:10233
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

관련 문장 - C Pointer