Skip to content

C++ 3Day 배열, 동적 배열, 배열 복사 (깊은 복사 & 얇은 복사) #3

Description

@KangHoyong

1차원 배열 과 문자열

  • 배열 선언
    const int NUMBER_OF = 100;
    double number = [NUMBER_OF];

  • 배열로 저장
    for ( int i = 0 ; i < NUMBER_OF ; i++)
    {
    cout << "Enter a new number is " ;
    cin >> number[i];
    sum += number[i];
    }

  • 주의
    배열 크기는 상수여야 한다 !

1차원 동적 배열 할당 / 2차원 동적 배열 할당

동적으로 배열을 할당하려면 , new[] , delete[] 연산자를 사용해야한다.

1차원 동적 배열 할당

int main()
{
       cout << "Enter a new number is ; 
       int length ; 
       cin >> length ; 
     
       // 동적 배열 할당 (사용자가 입력 받은 숫자 만큼 배열 생성)
       int *array  = new int[length];
       if(!array) // 메모리 할당 유무 확인 
       {
            cout << "메모리 할당 불가능" << endl;
            return 0 ;
       }
       for(int i = 0 ; i < length; i++)
      {
         cout <<  i  << " array number is " ;
         cin >> array[i];
      }
  
       delete [] array; 
       // 메모리 반환 (모든 작업이 끝난 후 에 메모리 반환 필수)
      // * 동적으로 배열 할당한 경우 delete[] 연산자를 사용하면 됩니다.

    ....
}

2차원 동적배열 할당

int main()
{
	// 2차원 배열 동적할당 사용자로 부터 N*N 입력 받아서 출력 
	int number1, number2;
	cout << "Enter number n : ";
	cin >> number1 >> number2;

	// 2차원배열 동적할당 선언 
	int** array;
	array = new int* [number1];
	for (int i = 0; i < number1; i++)
	{
		array[i] = new int[number2];
	}

	// 사용자로 부터 배열 값 받기
	for (int i = 0; i < number1; i++)
	{
		for (int j = 0; j < number2; j++)
		{
			cin >> array[i][j];
		}
	}
	
	// 2차원 배열 출력
	for (int i = 0; i < number1; i++)
	{
		for (int j = 0; j < number2; j++)
		{
			cout << array[i][j] << " "; 
		}
		cout << endl;
	}

	// 메모리 반환 
	for (int i = 0; i < number1; i++)
	{
		delete[] array[i];
	}
	delete[] array;
}

배열 해제 시 어떻게 해제할 메모리양을 알 수 있을까? 답은 new[]가 변수에 할당된 메모리양을
추적하므로 delete[]는 적절한 메모리를 해제할 수 있다. 불행하게도 프로그래머는 이 크기∙길이에 접근할 수 없다.

함수로 배열 전달

함수로 배열을 전달하려면

int func(int list[])

혹은

int func(int *list)

와 같이 매개변수를 선언해주면 된다.

함수 사용 시에는 다음과 같이 배열 자체를 인자로 넣어주면 된다.

int printArray(int list[], int size) // 배열을 매개변수로 받아서 사용
{
       for(int i = 0; i < size; i++)
              std::cout << list[i] << " ";
}

int main()
{
       int arr[10];
       for(int i = 0; i < size; i++)
              arr[i] = i;
       
       printArray(arr, size); // arr를 인자로 넣어줌

       return 0;
}

배열 복사 (깊은 복사 & 얇은 복사)

참고 * 정리예정

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions