2012-03-16 2 views
-1

스와핑의 경우 데이터를 변경하는 함수에 인수로 전달 된 데이터를 변경한다는 것을 알고 있습니다. 실제로는 C의 주소를 전달해야합니다. 변경할 데이터 정상적인 데이터 나 배열에 대해서는 매우 쉽지만, 배열 배열에 관해서는 막혔다. 혼란 스럽다. 내 주에서함수를 사용하여 배열 (행렬)의 값을 C 언어로 변경하십시오.

내가했다 : 코드의

int p[20][21]; 
FILE *f; 
f=fopen("intro.txt","rt"); 

m=0; 
n=0; 

while((c=getc(f)) != EOF) 
{ 
    if(c==' ') 
    { 
     p[m][n]=0; 
     n++; 
    } 
    else if(c=='^') 
    { 
     pa[m][n]=5; 
     n++; 
    } 
    else if(c=='*') 
    { 
     p[m][n]=1; 
     n++; 
    } 
    else if(c=='#') 
    { 
     p[m][n]=-1; 
     m++; 
     n=0; 
    } 
} 

이 블록 내 txt 파일에 따라, 내 매트릭스를 만드는 것입니다. 이것은, 내 프로젝트에서, 이후에 사용할 행렬을 초기화하는 단계입니다. ,

p1m=0; 
p1n=0; 

p2m=19; 
p2n=20; 

p[p1m][p1n]=5; 
p[p2m][p2n]=5; 

하지만, 함수 내에서이 작업을 수행하는 기능에 내 매트릭스를 전달해야 내 매트릭스를 만든 후

는, 내가 좋아하는, 내 매트릭스의 다양한 위치에 일부 값을 변경해야 내 매트릭스가 내 메인 내에서 변경되게하십시오.

가 나는 등의 함수에서 매개 변수를 설정하기 위해 시도했다 :

void myfunc(int* p[20][21]) 

와의 접속이 주요 같은 :

(myfunc &p[20][21]) 

또는

void myfunc(int** p[20][21]) 

하지만 내가 추측 옳은 방식으로하고 있지 않습니다.

답변

2

는 말이 :

void myfunc(int p[20][21]) 
{ 
    p[2][3] = 8; // for example 
} 

사용법 : Kerrek가 지적 하듯이

int main() 
{ 
    int p[20][21]; 
    myfunc(p); 
    return p[2][3]; 
} 
+0

네, 일부 행렬 요소에 새로운 값을 할당하고 있습니다 만, myfunc (p20) [21]과 같이 main에서 함수를 호출하면 함수에서이를 수행합니다. C. –

+0

@CristiCimpean : 당신은'myfunc (p);를 호출합니다. 그걸 편집하겠습니다. –

+0

멋진. 나는 지금 어리 석다. 둘 다 고마워. –

0

, 당신은 단순히 그 자체에 의해 배열 이름에 전달할 수 있습니다. 일반 어레이와 다르지 않습니다.

컴파일 할 때 배열 'p'에 주소가 할당되고 p가 호출 된 곳에서는 해당 주소가 사용됩니다. 그것은 마치 포인터처럼 취급됩니다. 당신이 함수도 2 차원 배열의 내부 배열을 주위 딩크 원하는 그렇다면, 당신은 단순히 호출 할 수

int myArray[x]; 
int my2DArray[x][y]; 
myfunc(myArray, my2DArray); 

기능은 두 개의 주소를 부여하고 함수에 달려있다을 적절하게 상호 작용하는 방법을 알고 그들 뒤에있는 데이터.

관련 문제