-
- memset(시작 주소, 원하는 값, 바꿀 길이) : 특정 메모리를 원하는 값으로 초기화 할 때 사용
char 배열에서는 원하는 값으로 초기화 가능하고,
int 배열에서는 0 과 -1 로 초기화하는 경우에만 사용가능하다.
- memset에서의 메모리 초기화
예를 들어 int arr[100] 을 1 로 초기화 하는 경우에 사용자가 의도한 바는 1은 arr[index] : 00000000 00000000 00000000 00000001 //int는 4 바이트
memset 이 실제로 바꾸는 1은 00000001 00000001 00000001 00000001 //각 바이트를 1 로 변경- memset(arr, 0, size), memset(arr, -1, size)
// 0 : 00000000 00000000 00000000 00000000
// -1 : 11111111 11111111 11111111 11111111 // 2의 보수(반전 후 + 1)- 내용
#include <iostream> int main() { char str[100] = "AAA"; //C언어 기반이다 > 메모리 위주로 접근 //memset(시작주소, 원하는 값, 원하는 길이) //숫자 0 > null //문자 '0' > null memset(str, '0', 100); //char 배열은 마음대로 초기화 가능 //char : 1byte //int : 4byte //memset 은 내부적으로 unsigned char 형태로 데이터를 다룸. memset(str, 'a', 20); int arr[100]; memset(arr, 1, 100); // 이상한 값이 들감 // 우리가 원하는 1은 00000000 00000000 00000000 00000001 // memset 이 바꾸는 1은 00000001 00000001 00000001 00000001 // 즉, memset은 각 바이트를 1 로 바꿈. // 즉, 0 과 -1 말고는 안된다. // 0 : 00000000 00000000 00000000 00000000 // -1 : 11111111 11111111 11111111 11111111 // 2의 보수(반전 후 + 1) int changeNum; cin >> changeNum; memset(arr, changeNum, sizeof(int) * 100); for (int i = 0; i < 100; ++i) cout << arr[i] << " "; // -1은 // 11111111 11111111 11111111 11111111 // 음수는 이진수에서 어떻게 표현할까 ? // 2의 보수 // - 전체 숫자를 반전 후 + 1 // 예를 들어서 -3 // - 숫자 3 : 00000011 // - 반전 : 11111100 // - +1 : 11111101 (컴퓨터가 -3 이라고 인식) // 3 + -3 // 00000011 // + 11111101 // 100000000 // (오버플로우 값은 버림) // 최종 값 : 00000000 // member 정리 // - char 배열에서는 자유롭게 원하는 값을 사용 // - int 배열에서는 0, -1 로만 초기화하자 // [참고] int 배열에서 다른 원하는 값 // - <algorithm> 헤더 파일 사용 // - fill(변경하려는 원소의 범위 시작주소, 변경하려는 원소의 범위 종료주소, 변경 값) fill(arr, arr + 101, 3); // 10~20 주소만 4로 변경 fill(arr + 10, arr + 20, 4); // - fill_n(변경하려는 원소의 범위 시작주소, 변경하려는 원소 갯수, 변경 값) fill_n(arr, 101, 5); // 10~20 주소만 6으로 변경 fill_n(arr + 10, 10, 6); // cstring vs string // cstring : char 배열 // string : string class 를 사용 // 둘 다 잘써야한다. // 코테에서 IDE 를 못 씀 // - 자주 쓰이는 string 메서드들 외우셔야 합니다 // - string 많이 쓰이는 함수들은 한 번씩만 정리 return 0; return 0; }
'공부 > C++' 카테고리의 다른 글
[우선순위 큐] priority_queue 사용자 정의 함수 (0) 2023.12.27 [Error] LNK2005 이미 정의되어 있습니다 (0) 2023.11.29 temp (0) 2023.10.25 [C++] 콘솔창 키입력 메뉴이동 ConsoleHandle (0) 2023.07.19 __restrict (0) 2023.07.14