시험에 대한 perparation에서 c/C++에 대한 몇 가지 일반적인 질문을하겠습니다. 이 질문 중 하나는 leer (char * a) 함수가 반환하는 값을 설명하는 것입니다. 함수가 C 문자열의 공백 수를 반환 할 것으로 기대했지만, 테스트 결과 leer가 실제로 첫 번째 char을 확인하므로 첫 번째 요소가 공백이면 0을, 그렇지 않으면 0을 반환합니다. 문자열을 반복하지만 첫 번째 문자를 확인한 후에 반환하지만 주 함수 내부의 동일한 루프는 처음에 생각한 것처럼 모든 공백을 계산합니다. leer에 대한 인수가 내 주요 함수 내부의 for 루프에서 사용하는 것과 같기 때문에 왜 다르게 동작하는지 이해하지 못합니다. 여기서 포인터 지식이 부족하다고 생각하지만 처음 생각이 잘못된 이유를 파악할 수 없습니다.함수 인수로 char *를 전달하면 예기치 않은 동작이 발생합니다.
#include <iostream>
int leer(char *a)
{
for(int b=0;*a!='\0';a++)
{
if(*a==' ') b++;
return b;
}
}
int main()
{
char *a = "Dies ist ein Test";
std::cout << leer(a) << std::endl; //Prints 0
int b;
for(b=0;*a!='\0';a++)
{
if(*a==' ') b++;
}
std::cout << b << std::endl; //Prints 3
}
포인터와 아무 관련이 없습니다. return 문을보십시오. – Borgleader
그래, 그거 당황 스럽네 : D 나는 포인터에 너무 집중하여 눈치조차 못했다. 지적 해 주셔서 감사합니다. 몇 시간 동안 검색했을 것입니다. – user3225499