아래 코드를 어떻게 해석해야합니까? &arr[1]
은 나를 완전히 던졌다. 나는 재귀가 생기고 있다고 생각하기 시작했다. 말하십시오 n = 7
. 그런 다음 먼저 arr[6]
을 인쇄하고 printArray(6, &arr[1])
, printf ("%d", arr[6-1])
을 인쇄합니다.
그리고 n>0
만큼 반복됩니다.앰퍼샌드가 포함 된 재귀 호출 함수
하지만이 재귀에 두 번째 요소의 주소가 어떻게 재생됩니까?
void printArray(int n, int arr[]){
if(n>0){
printf("%d", arr[0]);
printArray(n-1, &arr[1]);
}
}
arr [0]과 두 번째 요소 인 & arr [1]의 주소 사이의 상호 작용을 이해하지 못합니다. printf가 이미 arr [0]으로 설정되어있어 첫 번째 요소를 계속 인쇄하지 않으므로 함수가 호출 될 때 무슨 일이 발생합니까? – oxodo
그 트릭은 두 번째 요소의 주소를 보내고 두 번째 호출 인'printArray'에서 요소가 먼저 오도록합니다. 왜냐하면 c에서 array는 첫 번째 포인터를 가리키는 포인터이기 때문이다. – Mare70
재귀 호출의'arr'은 호출자의'arr'과 다릅니다. 첫 번째 버전에서는'& arr [1]'이 전달되는데, 이는 단지'arr + 1'입니다. 그래서 호출자의 관점에서, 재귀 적 호출은 단지'arr [1]'인'(arr + 1) [0]'을 출력합니다. –