2014-11-04 3 views
0

변수를 사용하여 특정 크기의 배열을 만들고 싶었지만 그럴 수있는 유일한 방법은 포인터를 사용하는 것입니다.배열 요소를 참조 해제하는 방법 (C++)

int size = 5; 
string* myArray = new string[size]; 

이제이 배열의 요소를 다른 변수에 할당하려고합니다.이 변수는 역 참조를 통해서만 작동합니다. 다음 코드 줄은 작동하지 않습니다. 어떻게 수정해야합니까?

string line; 

myArray[0] = "Hello"; 
line = *myArray[0]; 

편집 :

난 그냥 뭔가 명확히 할

: 중 하나가 작동하지 않는 정상 "에서 myArray [0]"코드를 사용합니다. 컴파일되지만 충돌이 발생합니다. 여기에 내가하고 싶은 것에 관한 좀 더 구체적인 코드가 있습니다.

void MyClass::setLine(string line) 
{ 
    myLine = line; /*This is a private variable in MyClass*/ 
} 

/////////////// 

MyClass* elements = new MyClass[size]; 

elements[0].setLine(myArray[0]); 

나는 클래스에서 개인 변수에 배열 요소를 할당 할,하지만 민간 변수에 값을 할당 할 때 프로그램이 충돌합니다.

+1

'line = myArray [0];'벡터 myArray (size); 대신 자신의 메모리를 삭제할 것을 강력히 권합니다. –

+0

... 또는 고정 크기 인 경우 대신'std :: array '를 사용하십시오. –

+2

"컴파일 오류가 발생합니다"라고 말하고 "작동하지 않음"대신에 오류 메시지를 붙여 넣을 수 있습니다. 이 쉬운 질문에 대해서는별로 중요하지 않지만 일반적으로 유용한 방법입니다. – anatolyg

답변

3

당신이 컴파일시에 크기를 알고 있다면, 당신은 정상적인 배열을 사용할 수 있습니다에 대한

. 런타임에 크기 만 알면 수동 할당보다 훨씬 쉬운 std::vector을 사용할 수 있습니다.

어쨌든 배열 관리를위한 포인터에 대해 배우고 싶다면 인덱스 연산자가 더하기 또는 참조 취소와 같습니다. 즉 ar[i]*(ar + i)과 같습니다. 즉, 색인 생성은 오프셋에서 역 참조하는 것입니다.

이와 같이 별도의 참조가 필요하지 않습니다. 실패한 행에 별표를 놓으십시오.

2

유효한 코드를 추가하거나 컬렉션에서 요소를 제거하려는 경우 대신 배열 클래스 std::vector를 사용할 수 그런데

string line; 

myArray[0] = "Hello"; 
line = myArray[0]; 

처럼 보일 것입니다. 예를

std::vector<std::string> myArray; 
myArrray.reserve(5); 

myArray.push_back("Hello"); 

line = myArray[0];