ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • memset 함수
    공부/C++ 2024. 1. 25. 11:43

    - 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
Designed by Tistory.