8. c++ 배열

han811·2021년 2월 17일
0

c++

목록 보기
8/14
post-thumbnail

배열의 기본 성질

  • global or static 배열일 경우 0으로 기본적으로 초기화 됩니다.

  • int array[100] = {1,}; 이런 식으로 사용할 경우 가장 처음 값만 1로 초기화되고 나머지는 0으로 초기화 됩니다.

  • local 배열일 경우에는 쓰레기 값으로 초기화가 되어버리니 주의 합니다.

  • 이건 일반 변수인 int c; 와 같은 경우에도 global 혹은 static에서는 자동으로 0으로 초기화 되는 것과 같은 원리 입니다.

  • 배열을 0이 아닌 다른 값으로 초기화 하는 방법

기본 초기화 함수

1) std::fill_n(배열 시작 주소, 변경하려는 원소 갯수, 변경 값)
int arr[5];
fill_n(arr,5,1);
2) std::fill(배열 시작 주소, 변경하려는 원소의 범위 종료주소, 변경 값)
int arr[5];
fill(arr,arr+5,1);
3) memset(값을 채울 메모리 시작 주소, 채울 값, 채울 바이트 수)
#include <iostream>
#include <cstring>
using namespace std;

int main(void)
{
	int d[100][100];
    memset(d, -1, sizeof(d));

	return 0;
}
  • 여기서 채울 값은 자동으로 unsigned char 로 형변환 되어서 사용된다고 합니다.
  • cstring 라이브러리 안에 있습니다.
  • 기본적으로 char형으로 변환하여 1바이트씩 초기화가 진행되므로 char영역이 아닌 다른 자료형의 배열의 경우 0이 아닌 값으로 초가화 할 시 예상하지 못한 값으로 초기화 될 수 있으니 주의하여야 합니다. 이는 mem~ 계열 함수 모두에 해당됩니다.
  • 0과 -1로만 초기화할 때 사용합시다.
4) memmove(데이터가 복사될 시작점을 가리키는 포인터, 복사할 데이터가 있는 위치를 가리키는 포인터, 복사할 바이트 수)
#include <iostream>
#include <cstring>
using namespace std;

int main(void)
{
	char a[] = "how to use memmove, let's show!";
    memmove(a+15,a+10,5);
    cout << a << '\n';
	return 0;
}
  • 위와 마찮가지로 cstring 라이브러리 안에 있습니다.
5) memcpy(데이터가 복사될 곳의 주소, 복사할 데이터들이 위치한 주소, 복사할 데이터 바이트 수)
#include <iostream>
#include <cstring>
using namespace std;

int main(void)
{
	char a[] = "how to use memcpy, let's show";
    char b[30];
    char c[30];
    
    memcpy(b,a,strlen(a)+1);
    memcpy(c,"열공!",15);
    
    cout << a << '\n';
    cout << b << '\n';
    cout << c << '\n';

	return 0;
}
  • 위와 마찮가지로 cstring 라이브러리 안에 있습니다.
reference
profile
han811

0개의 댓글