2012-04-23 3 views
0

C++ 배열에 대한 학습을 ​​강화하지 않았으며이를 올바르게 수행하는 방법을 잊어 버렸습니다. 전에 char 배열을 사용했지만 int 배열에서도 작동하지 않습니다.int 배열에 대한 포인터, 다른 메서드에서 전달 및 사용

int myIntArray[10]; 

그래서이 정확한 순간에 널 (null)의 배열한다 :

나는 비어있는 새 int 배열을 선언?

은 그 때 나는이 배열에 대한 포인터를 할당합니다

int *pMyArray = myIntArray 
희망

거기에 그게 올바른.

은 그 때 나는 다른 곳에서 다른 방법으로이 문제를 전달합니다

나는 (내가 정말 모르겠어요 곳이다) 지역 변수로이 포인터를 할당 할
anotherMethod(pMyArray) 

:

anotherMethod(int *pMyArray){  
    int myLocalArray[];  
    myLocalArray[0] = *pMyArray;  
} 

컴파일 오류가 발생하지는 않지만 몇 가지면에서 맞는지 확신 할 수 없습니다. 모든 도움과 조언을 부탁드립니다.

편집 :

나는 무엇을하려고 했어야 했습니까?

매우 간단하지만 실제로는 다른 방법으로 로컬 배열을 수정하고 싶습니다. 그래서

I가 가지고

방법 1 포함될 것이다 :

INT의 myArray1을 [10] = {0};

방법 2에서 myArray 포인터를 전달 될 것입니다 :

그런 다음 몇 가지 코드가 배열에서 myArray의 변수를 수정할 수 있습니다.

+4

대신'std :: vector '을 사용하면 모든 문제가 해결됩니다. –

+0

일부 테스트 코드를 통해 알아낼 수 있습니다. "지식"에 의존하지 마십시오. 그것을 시험해 보라! –

+0

이 프로그램에 대한 컴파일 오류가 표시되지 않으면 프로그램을 켜야합니다. GCC에서, 그것은'g ++ -Wall'입니다. 또는 더 나은,'- 벽 - 실수 '. –

답변

1
int myIntArray[10]; 

이것은 초기화되지 않은 배열입니다. 반드시 0을 포함하지는 않습니다.그래

int *pMyArray = myIntArray 

, myIntArray의 첫 번째 요소 pMyArray 포인트.

anotherMethod(int *pMyArray){  
    int myLocalArray[10];  
    myLocalArray[0] = *pMyArray;  
} 

이 그것은 int가, 기억, pMyArray, 가리키는 초기화되지 않은이었다에 로컬 배열의 첫 번째 값을 할당, 아무것도 포인터를 할당하지 않습니다. 은 C++에서 알 수없는 크기의 배열을 가질 수 없기 때문에 거기에 추가되었습니다. 즉, 당신은 자동 스토리지에 어떤 값을 할당하는 경우

anotherMethod(int *& pMyArray) 

또한, 그것은 정의되지 않은 동작 발생합니다 :

, 당신은 참조로 전달할 필요가 무엇 pMyArray 점을 수정하려면 함수가 종료 될 때 메모리가 더 이상 유효하지 않습니다.

1
int myIntArray[10]; 

이 순간에 올바른 null 배열이되어야합니까?

아니요, 이것은 스토리지 사양에 따라 값이 포함 된 10 개의 정수 배열입니다.
로컬로 생성 된 경우 임의의 가비지 값이 있습니다.
전역 적으로 생성 된 경우 값은 POD에 대해 초기화 된 0으로 초기화됩니다.

게다가 당신의 방법은 당신이 건네주는 배열의 첫번째 값을 가진 로컬 배열을 할당합니다.
정확히 무엇을하려합니까? 나는 잘 모르겠다.

1
int myIntArray[10]; 
So this should be an array of nulls for the moment correct? 

정확하지 그것은 10 초기화 int 배열이다.

int *pMyArray = myIntArray 
Hopefully thats correct to there. 

없음 매우 정확, pMyArray는 제 1 요소에 대한 포인터, myIntArray [0].

내가 ( 난 정말 모르겠어요 곳이다) 지역 변수로이 포인터를 할당 할

:

당신이 정말로 포인터를 할당해야하는 경우, 당신은이를 사용할 필요가 코드

int *p_myLocalArray;  
p_myLocalArray = pMyArray; 
1

여기에는 몇 가지 실수가 있습니다.

우선, 제로 (널링 생략) 초기화 구문을 사용하여 달성된다 배열 :

int myIntArray[10] = {0};

둘째 int myLocalArray[];을 0의 크기를 가지며, 그 크기가 않았어도, 말 , 10, myLocalArray[0] = *pMyArray;으로 작성하면 pMyArray의 첫 번째 int가 mLocalArray으로 할당됩니다. 이는 의미가 아닙니다.

당신이 단순히 배열의 포인터를 지정하려면 : 당신이 배열의 로컬 복사본을 원하는 경우

int *myLocalPointer; 
myLocalPointer = pMyArray; 

을, 당신은 로컬로 복사해야합니다, 그리고 당신은 또한 필요 크기 및 동적 할당 :

관련 문제