클래식 스왑 함수에서 두 포인터를 전달할 때 포인터가 가리키는 값은 바뀝니다. 그러나, 함수 호출이되면 간단한 함수C 언어 참조에 의한 호출
int leng (char *a)
{
int n;
for (n=0; *a!='\0'; a++)
n++;
return n;
}
에서, 포인터는 여전히 아닌 마지막 요소 어레이의 첫 번째 요소를 가리킨다. 왜 그런가요? 스왑 기능과 다른 점은 무엇입니까?
클래식 스왑 함수에서 두 포인터를 전달할 때 포인터가 가리키는 값은 바뀝니다. 그러나, 함수 호출이되면 간단한 함수C 언어 참조에 의한 호출
int leng (char *a)
{
int n;
for (n=0; *a!='\0'; a++)
n++;
return n;
}
에서, 포인터는 여전히 아닌 마지막 요소 어레이의 첫 번째 요소를 가리킨다. 왜 그런가요? 스왑 기능과 다른 점은 무엇입니까?
포인터 자체가 개체입니다. 이 경우, 포인터는 참조가 아닌 값으로 포인터를 전달하므로 포인터 자체의 변경 사항은 함수 외부에 반영되지 않습니다. 함수에서 포인터가 가리키는 객체를 변경하려는 경우 해당 변경 사항은 함수 외부에서 유지됩니다.
시도 :
int leng (char** a)
{
int n;
for (n=0; **a!='\0'; (*a)++)
n++;
return n;
}
leng(&pointer);
그것은 실제로 swap
함수와 동일합니다 다음 swap
기능은 지적-에있는 값을 변경할 수 있습니다,하지만 당신은 포인터 자체를 변경하지 않습니다. 마찬가지로 leng
은 a
이 가리키는 문자열의 문자를 변경할 수 있지만 a
그 자체가 —으로 변경되어 다른 배열 요소 —을 가리 키도록 호출자가 볼 수 없습니다.
int leng (char **a)
{
int n;
for (n=0; **a!='\0'; *a++)
n++;
return n;
}
및a
에 대한 포인터 전달 : 당신이 그 변경을 원했습니다 경우
, 당신은 서면으로 그렇게 할 수 있습니다.
일반적인 포인터가 아닌 포인터를 가리키는 포인터가 필요할 수도 있습니다. (포인터 자체는 값에 의해 전달되며, 전달 된 포인터의 사본 값을 변경합니다.
포인터를 값으로 전달 중입니다. 포인터 값은 함수 호출 중에 스택에 복사됩니다. 스택 변수를 증가 시키면 함수가 반환 될 때 사라집니다.
http://c-faq.com/ptrs/passptrinit.html – hmjd
이 질문에 대한 답변을 찾으십니까? – paddy
질문하기 전에 FAQ를 확인하십시오. – Saju