2012-09-02 2 views
0

고정 된 크기의 배열을 사용하는 함수가 있습니다. 이 함수는 배열의 내용을 수정하여 배열로 포인터를 전달하려고합니다. 내가 컴파일러 오류를 얻을포인터를 배열로 전달

New_Values(&u, &v, q); //q is an integer 

: 여기

void New_Values(int* u[3], int* v[3], const int q); 

내 함수 호출 : 여기
int u[] = {1, 0 , a}; //a is an integer 
int v[] = {1, 0 , a}; //a is an integer 

내 프로토 타입입니다 : 여기

내 배열의 정의입니다 :

0 호환되지 않는 포인터 유형에서 'New_Values'의 인수 하나를 전달

와 호환되지 않는 포인터 유형에서 'New_Values'의 인수 2를 통과

+0

[comp.lang.c FAQ] (http://www.c-faq.com)의 섹션 6을 읽으십시오. –

답변

4

만 예외적으로 당신이 함수에 배열에 대한 포인터를 전달하려는 것이다; 당신은 가능성이 가장 높은 다른 제안으로 할 수 있습니다 :

void New_Values(int u[], int v[], int q); 
void New_Values(int *u, int *v, int q); 

(이 선언은 동일합니다, 그것은 후자처럼 기록 된 것처럼 컴파일러는 전 취급, 그래서 가장 자주 간단한 포인터 표기법을 대신 볼 수 있습니다 . 배열 표기법보다)

그리고 전화 : - 당신이 있었다 정수 포인터의 배열을 지정하려고 무엇을

New_Values(u, v, q); 

당신이 정말로 배열에 대한 포인터로 재생하려면, 당신은 올바른 표기법을 사용해야합니다 정수 배열에 대한 포인터가 아닙니다.

void New_Values(int (*v)[], int (*v)[], int q); 

그리고 호출 :

New_Values(&u, &v, q); 

New_Values() 내부, 당신은 사용하십시오 :

(*v)[i] = (*u)[j] + q; 

이것은 C의의 그림입니다 '선언 구문을 사용하는 경우 구문 일치'.

매개 변수에서 const을 삭제했습니다. 완전 무의미한 것은 아니지만 호출 된 함수가 매개 변수를 수정하는 경우 호출 된 함수의 값을 수정할 위험이 없습니다.

3

그냥 함수 걸릴 포인터를합니다

void New_Values(int *u, int *v, const int q); 

그리고 그냥 배열처럼 사용하십시오. 이 경우 배열은 첫 번째 요소에 대한 포인터로 붕괴됩니다. 또한 함수 호출에서 &을 삭제하고 다음과 같이 말하십시오. New_Values(u, v, q);

1

배열 이름을 배열로 가져 와서 포인터로 감쇠시킵니다.

패스로 :

New_Values(u, v, q); 

와 함수 프로토 타입 :

void New_Values(int* u, int* v, const int q); 
관련 문제