C에서 배열을 0으로 초기화

Satishkumar Bharadwaj 2023년10월12일
  1. C 라이브러리 함수memset()사용
  2. 배열을 0이외의 값으로 초기화
C에서 배열을 0으로 초기화

이 튜토리얼에서는 C에서 배열을 0으로 초기화하는 방법을 소개합니다.

C에서 배열의 선언은 다음과 같습니다.

char ZEROARRAY[1024];

전역 범위에서 런타임시 모두 0이됩니다. 로컬 배열 인 경우 속기 방법이 있습니다. 선언 및 초기화는 다음과 같습니다.

char ZEROARRAY[1024] = {0};

배열이 부분적으로 초기화 된 경우 초기화되지 않은 요소는 관련 데이터 유형의 값 0을받습니다. 컴파일러는 작성되지 않은 항목을 0으로 채 웁니다.

이니셜 라이저를 지정하지 않으면 정적 저장소가있는 객체는 0으로 초기화됩니다. 선언은 다음과 같습니다.

static int myArray[10];

이니셜 라이저 목록이 비어 있거나 이니셜 라이저 목록에 0이 지정된 경우 배열은 0으로 초기화됩니다. 선언은 다음과 같습니다.

int number[5] = {};
int number[5] = {0};

배열을 초기화하는 가장 간단한 기법은 모든 요소를 반복하여 0으로 설정하는 것이다.

#include <stdio.h>

int main(void) {
  int numberArray[10], counter;

  for (counter = 0; counter < 5; counter++) {
    numberArray[counter] = 0;
  }
  printf("Array elements are:\n");
  for (counter = 0; counter < 5; counter++) {
    printf("%d", numberArray[counter]);
  }
  return 0;
}

출력:

Array elements are:
00000

C 라이브러리 함수memset()사용

memset()함수는 string.h의 라이브러리 함수입니다. 특정 값으로 메모리 블록을 채우는 데 사용됩니다.

memset()함수의 구문은 다음과 같습니다.

void *memset(void *pointerVariable, int anyValue, size_t numberOfBytes);

어디,

  • pointerVariable은 채울 메모리 블록에 대한 포인터 변수입니다.
  • anyValue는 설정할 값입니다. 이것은 정수 값이지만 함수는이 값의 부호없는 문자 변환을 사용하여 메모리 블록을 채 웁니다.
  • numberOfBytes는 값에 설정할 바이트 수입니다.

이 함수는 메모리 영역 pointerVariable에 대한 포인터를 반환합니다.

전체 프로그램은 다음과 같습니다.

#include <stdio.h>
#include <string.h>

void printArrayvalues(int anyArray[], int anyNumber) {
  int index;
  for (index = 0; index < anyNumber; index++) printf("%d ", anyArray[index]);
}

int main(void) {
  int number = 10;
  int arrayValues[number];

  memset(arrayValues, 0, number * sizeof(arrayValues[0]));
  printf("Array after memset()\n");

  printArrayvalues(arrayValues, number);

  return 0;
}

출력:

Array after memset()
0 0 0 0 0 0 0 0 0 0 

배열을 0이외의 값으로 초기화

gcc를 사용하여0 이외의 값으로 배열을 초기화하는 것은 다음과 같습니다.

int myArrayValues[1024] = {[0 ... 1023] = -1};

배열의 모든 구성원은 차원을 생략하여 명시 적으로 초기화 할 수 있습니다. 선언은 다음과 같습니다.

int myArrayValues[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};

컴파일러는 이니셜 라이저 목록에서 차원을 추론하고 다차원 배열의 경우 가장 바깥 쪽 차원 만 생략 할 수 있습니다.

int myPoints[][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

관련 문장 - C Array