C에서 포인터의 크기 얻기

Waqar Aslam 2023년10월12일
  1. C 프로그래밍 언어의 포인터
  2. sizeof() 메서드를 사용하여 C에서 포인터 크기 가져오기
  3. malloc() 메서드를 사용하여 C에서 포인터 크기 가져오기
C에서 포인터의 크기 얻기

이 기사에서는 C 프로그래밍 언어를 사용하여 포인터의 크기를 결정하는 방법을 보여줍니다.

C 프로그래밍 언어의 포인터

포인터로 알려진 변수는 값이 다른 변수의 주소인 변수입니다. 즉, 포인터 자체에 메모리 위치의 직접 주소가 포함됩니다. 포인터를 사용하여 변수의 위치를 유지하려면 먼저 포인터를 선언해야 합니다.

통사론:

type *var - name;

여기서 type은 포인터의 기본 유형을 나타내며 유효한 데이터 유형이어야 하며 var-name은 포인터를 저장하는 변수의 이름입니다. 포인터를 지정하는 데 사용되는 별표(*)는 곱셈에 사용되는 별표와 동일하다는 점에 유의해야 합니다.

한편 이 문장에서 별표(*)는 특정 변수가 포인터임을 나타내기 위해 사용됩니다. 다음은 포인터에 허용되는 몇 가지 다른 데이터 유형 선언입니다.

int *integerPointer;
char *characterPointer;
float *floatPointer;
double *doublePointer;

sizeof() 메서드를 사용하여 C에서 포인터 크기 가져오기

sizeof() 메소드는 하나의 매개변수만 허용합니다. 컴파일러에 의해 값이 결정되는 연산자입니다. 이러한 이유로 컴파일 타임 단항 연산자라고 합니다.

sizeof() 함수는 부호 없는 정수 데이터 유형을 반환합니다.

데이터 유형이 다른 다양한 변수의 크기를 결정하기 위해 sizeof() 함수를 사용하는 예를 들어 보겠습니다. 각각 int, char, floatdouble 데이터 유형을 사용하여 a, b, cd라는 이름의 4개 변수에 대한 초기 값을 설정합니다.

int a = 10;
char b = 'x';
float c = 10.01;
double d = 10.01;

*integerPointer, *characterPointer, *floatPointer*doublePointer라는 이름으로 초기화 한 후 각각 a, b, c, d 값을 할당합니다.

int *integerPointer = &a;
char *characterPointer = &b;
float *floatPointer = &c;
double *doublePointer = &d;

이제 변수와 포인터 변수의 크기를 출력하려면 printf 명령이 필요합니다.

이러한 명령문은 sizeof 연산자를 활용하는 데 필요하며 여기에 제공되어야 하는 매개변수는 a, b, c, d 및 그에 따라 *integerPointer, *characterPointer, *floatPointer, *doublePointer입니다.

printf("size of (a) = %lu bytes", sizeof(a));
printf("\nsize of (a) pointer = %lu bytes", sizeof(*integerPointer));

printf("\nsize of (b) = %lu bytes", sizeof(b));
printf("\nsize of (b) pointer = %lu bytes", sizeof(*characterPointer));

printf("\nsize of (c) = %lu bytes", sizeof(c));
printf("\nsize of (c) pointer = %lu bytes", sizeof(*floatPointer));

printf("\nsize of (d) = %lu bytes", sizeof(d));
printf("\nsize of (d) pointer = %lu bytes", sizeof(*doublePointer));

sizeof 메서드의 결과가 부호 없는 정수이기 때문에 %lu 표기가 사용됩니다.

완전한 소스 코드:

#include <stdio.h>

int main() {
  int a = 10;
  char b = 'x';
  float c = 10.01;
  double d = 10.01;

  int *integerPointer = &a;
  char *characterPointer = &b;
  float *floatPointer = &c;
  double *doublePointer = &d;

  printf("size of (a) = %lu bytes", sizeof(a));
  printf("\nsize of (a) pointer = %lu bytes", sizeof(*integerPointer));

  printf("\nsize of (b) = %lu bytes", sizeof(b));
  printf("\nsize of (b) pointer = %lu bytes", sizeof(*characterPointer));

  printf("\nsize of (c) = %lu bytes", sizeof(c));
  printf("\nsize of (c) pointer = %lu bytes", sizeof(*floatPointer));

  printf("\nsize of (d) = %lu bytes", sizeof(d));
  printf("\nsize of (d) pointer = %lu bytes", sizeof(*doublePointer));

  return 0;
}

출력:

size of (a): = 4 bytes
size of (a) pointer: = 4 bytes
size of (b): = 1 bytes
size of (b) pointer: = 1 bytes
size of (c): = 4 bytes
size of (c) pointer: = 4 bytes
size of (d): = 8 bytes
size of (d) pointer: = 8 bytes

malloc() 메서드를 사용하여 C에서 포인터 크기 가져오기

malloc 기술을 사용하여 크기를 할당하는 포인터 변수의 또 다른 예를 살펴보겠습니다.

main() 함수 내에서 데이터 유형 char로 포인터 변수를 시작하고 이름을 *cPointer로 지정합니다. malloc()이라는 이름의 함수를 할당하고 sizeof() 메소드를 인수로 제공하십시오.

sizeof 메서드는 char *를 인수로 받아들입니다.

int main() { char *cPointer = malloc(sizeof(char *)); }

이 시점에서 *cPointer 값을 바이트 단위로 출력해야 합니다.

printf("Size of the pointer is %lu bytes.\n", sizeof(*cPointer));

완전한 소스 코드:

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

int main() {
  char *cPointer = malloc(sizeof(char *));
  printf("Size of the pointer is %lu bytes.\n", sizeof(*cPointer));

  return 0;
}

출력:

The size of the pointer is 1 byte.
작가: Waqar Aslam
Waqar Aslam avatar Waqar Aslam avatar

I am Waqar having 5+ years of software engineering experience. I have been in the industry as a javascript web and mobile developer for 3 years working with multiple frameworks such as nodejs, react js, react native, Ionic, and angular js. After which I Switched to flutter mobile development. I have 2 years of experience building android and ios apps with flutter. For the backend, I have experience with rest APIs, Aws, and firebase. I have also written articles related to problem-solving and best practices in C, C++, Javascript, C#, and power shell.

LinkedIn

관련 문장 - C Pointer