2010-12-19 4 views
0

프로그래밍을 처음 사용하고 다음 기준에 따라 하나의 배열을 다른 배열에 넣는 함수를 작성했습니다. 대상 배열의 변수는 한 번만 반복되고 소스와 대상 배열은 동일하게됩니다 크기.반복 변수를 취소하면서 배열을 다른 배열로 변경하는 방법은 무엇입니까?

int RemoveDup (int src[],int dst[]) 
//recive two array compare them and copy the src array to dst,and only the none reacuring 
//numbers,the arrays must be from the same size 

{ 
int size_src; 
int size_dst; 
int i,n=0; 
size_src = sizeof(src)/sizeof(int);//determine the size of source array 
size_dst = sizeof(dst)/sizeof(int);//determine the size of destination array 
if (size_src = size_dst);//checks that the array are in the same size 
{ 
for(i = 0;i < size_src;i++)//the loop for advancing the copying process 
{ 
dst[i] = src[i]; 
} 
while (i<size_dst) 
{ 
dst[i] = dst[i++]; 

if (dst[i] = dst[i++])//relay on the fact that if the function will find a similar varibale, the tested varibale will be set to 0 and the other one will come out clean in the check 
dst[i] = 0;//eliminating the varibale in that specific address 
} 
} 


return dst [i]; 

하지만 일을하고 잘못 가고 아무 생각이없는 것 같다하지 않습니다 내가 생각 해낸 기능입니다. 도움이나 단서가 인정 될 것입니다.

+1

가장 먼저 배울 점은 코드의 들여 쓰기 *입니다. 그렇지 않으면 왼쪽에 줄 지어있는 모든 코드를 읽는 것이 매우 어렵습니다. –

+0

@ david : 작은 도구 모음 아이콘이 편집기에 표시됩니다. '{} '로 표시된 것은 블록을 코드로 렌더링하는데 Anon이 여러분에게 물어 보았던 것입니다. 편집 페이지의 사이드 바에 다른 형식 옵션이 있습니다. – dmckee

+1

이 숙제가 있습니까? – t0mm13b

답변

0

C에서는 배열 매개 변수를 사용하는 함수를 선언 할 수 없습니다. 배열 선언자를 함수 매개 변수로 사용하면 해당 유형이 해당 포인터 유형에 자동으로 조정됩니다. 명시 적 배열 크기 (지정된 경우)는 버려집니다. 즉

, 당신은 사용할 때이 :

int RemoveDup (int src[],int dst[]) 

가이 정확히 동일하다 :

int RemoveDup(int *src, int *dst) 

sizeof(src)/sizeof(int)은 당신이 원하는 계산을하지 않는 이유는 지금 명백해야한다 할 것이다.

2

int src[]을 매개 변수로 사용하는 함수 내에서 sizeof(src)을 사용하고있는 것으로 나타났습니다. 이것은 당신이 생각하는 것을하지 않습니다. C에서 배열의 크기는 배열 자체와 함께 함수에 전달되지 않습니다 (익숙한 다른 언어와 달리). 실제 크기를 별도의 매개 변수로 전달해야합니다.

또한 일부 printf() 문은 디버깅에 도움이 될 것입니다. 가치가 있어야한다고 생각하는지 확인하십시오. 다행히 대화식 디버거에 액세스 할 수 있으면 유용 할 것입니다.

+0

'sizeof (arr)/sizeof (int)'와'arr'에 배열이있을 때 배열에 몇 개의 원소가 있는지를 알려준다.이 경우에'src'는 포인터 타입 ('int * src'를 쓰는 또 다른 방법 인'int src []')을 가지고 있으며, 포인터가 아닌 다른 함수에 배열을 전달할 방법이 없습니다. – sepp2k

0

실제로 함수는 포인터가 아닌 배열을 수신 할 수 있습니다 (물론 배열의 크기는 미리 정의되어 있습니다).

은 그래서 당신은 사용할 수 있습니다 : 그 사용하여 포인터가 더 있지만 동의

int RemoveDup(int src[M],int dst[N]){ 
    . 
    . 
    . 
return whatever; 

. 제 의견으로는 코스 포인터를 사용하여 재귀 함수를 작성해야합니다. 다음 호출이 (* src + 1)이므로 다음 셀을 볼 수 있습니다. 종료 조건은 다음과 같습니다.

if (sizeof(src) == 0) { 
//exit recursion statement. 
} 
관련 문제