2

digits라는 2 차원 배열을 만들었으며 각 하위 배열을 하나씩 초기화하여 코드를 명확하게 만듭니다. 나는 다음과 같은 코드가 작동하는지 이해 :C++ 2 차원 배열에서 값을 초기화하려고합니다

string digits[2][5] = { { " - ","| |"," ","| |"," - " },{ " - ","| |"," ","| |"," - " } }; 

을하지만, 다음이 작동하지 않는 이유를 궁금 :

string digits[2][5]; 
digits[0] = { " - ","| |"," ","| |"," - " }; 
digits[1] = { " - ", "| |", " ", "| |", " - " }; 
+0

그것의 과제입니다. 목록 초기화는 초기화에만 사용됩니다. –

답변

2

제 2 회 한 초기화되지 않으며, 그것은 (digits의 요소) 할당입니다.

string digits[2][5];        // initialization 
digits[0] = { " - ","| |"," ","| |"," - " };  // assignment of the 1st element of digits 
digits[1] = { " - ", "| |", " ", "| |", " - " }; // assignment of the 2nd element of digits 

digits의 요소

원시 array은 전체로 할당 될 수있는 배열이다. 어레이 형의

개체 전체적으로 변형 될 수 없다 : 그들은 가 lvalues가 (어레이의 어드레스가 취해질 수 등)가 가 할당 연산자의 좌측에 표시 할 수없는 경우에도

std::array 또는 std::vector으로이 작업을 수행 할 수 있습니다.이 중괄호 이니셜 라이저로 할당 할 수 있습니다.

std::array<std::array<std::string, 5>, 2> digits; 
digits[0] = { " - ","| |"," ","| |"," - " }; 
digits[1] = { " - ", "| |", " ", "| |", " - " }; 
2

초기화가 할당과 크게 다릅니다. 초기화는 선언하는 동안 변수에 값을 지정하고 (호출자 생성자) 할당은 선언 한 다음 (할당 연산자 호출) 선언합니다.

#include <iostream> 
#include <string> 
using namespace std; 


int main() 
{ 
    string s[2][3]; 
    string Hi = "Hi there!"; 

    s[0][0] = "Hello there!"; 
    //.... 

    for(int i(0); i < 2; i++) 
     for(int j(0); j < 3; j++) 
      s[i][j] = Hi; 

    for(int i(0); i < 2; i++) 
     for(int j(0); j < 3; j++) 
      cout << s[i][j] << endl; 

    return 0; 
} 
1

당신이 명확성을 위해이 줄을 변경하는 경우도 고려하십시오 :

string digits[2][5] = { 
     {" - ", "| |", " ", "| |", " - "}, 
     {" - ", "| |", " ", "| |", " - "} 
    }; 

참고 : 당신이 브래킷을 제거하고 수동 예를 들어 루프를 사용하거나 올바르게 할당 을 고려하십시오. 들여 쓰기는 강력한 도구이지만 오용 될 수 있습니다.

관련 문제