2013-05-08 3 views
2

간단한 질문이 있습니다. 저는 C 프로그램을 가지고 있습니다 ... 저는 배열이 길고 두 배열에이 배열에 대한 포인터를 전달하고 싶습니다. 이 방법으로 배열을 전달하는 것이 맞습니까?C 배열 및 배열에 대한 포인터

long[] myArray 


void myFunction1(long *myArray[]){ 

*myArray[0] = 1; 

} 

void myFunction2(long *myArray[]){ 

*myArray[1] = 2; 

} 

이 정보가 맞나요? 이 긴 포인터, 얼마의 값을 저장할 수있는 배열을 나타냅니다

long *myArray[] 

-이 같은 변수를 선언 할 때 때문에

+7

아니요, 정확하지 않습니다. 함수 매개 변수를'long myArray []'로 변경하고 별표없이 값을 지정하십시오. –

+0

log * array []는 다차원 배열 일 수 있으며, 배열은 포인터입니다. * myarray [1] = 2는 요소를 역 참조하여 하위 요소에 액세스하는 것과 같습니다. * myarray [1] = myarray [0] [1] – Lefsler

+3

왜 테스트를 해보고 작동하는지 확인하십시오. –

답변

2

아니, 이것은 올바르지 않습니다. 나는 (당신의 기능 기관에서) 이것은 당신이하려는 의도가 아니라고 생각하고 있습니다.

long myArray[]에 함수 매개 변수를 변경하고 별표없이 값을 할당

.

이 같이

-

void myFunction1(long myArray[]){ 
    myArray[0] = 1; 
} 

void myFunction2(long myArray[]) { 
    myArray[1] = 2; 
} 

또는, 다음 포인터를 사용하려는 경우 - 두 경우 모두에서

void myFunction1(long *myArray){ 
    myArray[0] = 1; 
} 

void myFunction2(long *myArray) { 
    myArray[1] = 2; 
} 

, 배열의 크기가 적어도 있는지 확인하기 위해 기억 2.

2

음,의 그것에 대해 생각하자 :

long myArray[3]; // This is an array of 3 long's 

long *myArray[3]; // Is this? No, this is an array of 3 pointers to longs. 

꽤 많이 대답 해줍니다.

void myFunction1(long *myArray[]){ 

는 함수 (긴 또는 기타)에 배열을 전달하는 방법이 아니다.

void myFunction1(long myArray[]){ 
    myArray[0] = 1; 

하거나 포인터를 수행 할 수 있습니다 : 당신은 배열을 취할 필요

작동
void myFunction1(long *myArray){ 
    myArray[0] = 1; 

때문에 포인터로 배열 붕괴가. 당신이 void myFunction1(long *myArray[]) 선언 할 때

1

, 난 당신이 실수를하고있다 생각한다.

하나는 당신이 배열에 대한 포인터가이 목적으로 생각한다는 것입니다. 그러나 대괄호 []은 별표 *보다 식별자 식별자 myArray에 더 긴밀하게 바인딩됩니다. 그래서 매개 변수는 long에 대한 포인터의 배열 인 long *(myArray[])입니다,하지만 난 당신이 long (*myArray)[]long의 배열에 대한 포인터를위한 생각합니다.

실제로이 매개 변수를 사용하여 함수를 선언하고 myFunction1(&myArray)처럼 배열에 대한 포인터를 전달하고 (*myArray)[0] = 1;과 같이 함수 내부에서 포인터를 사용할 수 있습니다.

그러나, C는 우리에게 바로 가기를 제공하고, 그것을 사용하지 않는 것은 두 번째 실수입니다. 당신이 long myArray[]로 매개 변수를 선언하면, 그것은 배열처럼 보이지만 실제로 long에 대한 포인터입니다 long *myArray로 변환됩니다.그런 다음 배열을 myFunction1(myArray)으로 전달할 수 있습니다. myArray은 배열이지만 C는이를 첫 번째 요소에 대한 포인터로 변환합니다. 따라서 인수 myArraylong myArray[]과 일치합니다. 그런 다음 함수 내부에서 myArray[0] = 1;과 함께 포인터를 사용할 수 있습니다.

바로 가기를 사용하면 표기법이 더 짧아지고 일반적으로 자연 표기법으로 간주되므로 선호됩니다.