다음 코드를 사용하여 포인터를 사용하여 정수 배열을 반복하려고합니다.
#include <iostream>
int main (int argc, char ** argv)
{
int ar[] = {1,1,2,3,5,8,13,21,34,55};
char s[] = "string";
std::cout << "Print fibonacci until ten using pointers" << std::endl;
for (int * p = ar; *p; p++)
{
std::cout << *p << std::endl;
}
// for (char * cp = s; *cp; cp++)
// std::cout << "char is " << *cp << std::endl;
return 0;
}
이 코드를 실행하면 모든 요소 10 개와 숫자 4196368을 얻습니다 . 그러나 두 번째 for 루프의 주석 처리를 제거하고 다시 실행하면 숫자가 사라집니다.
누군가 왜 이런 일이 발생하는지 설명 할 수 있습니까? 필요한 경우 코드는 64 비트 Linux 상자에서 컴파일됩니다.
당신은 운 좋게도 루프가 전혀 멈췄습니다. 당신은 당신의 전체 이웃을 날려 버릴 수 있습니다!
루프는 배열 반복을 종료하기 위해 "0"을 찾을 것으로 예상하지만 배열에 0이 없습니다. 따라서 루프는 신이 무엇을 알 때까지 배열의 끝을지나 계속 증가합니다. 실제 결과는 예측 가능하거나 유용하게 설명하기에는 너무 많은 실제 요인에 따라 달라집니다.
"null-termination"을 사용하여 int
배열 을 반복하는 것이 매우 독특 하기 때문에 이것이 연습이라고 생각합니다 . 실제로는 다음과 같이 작성합니다.
for (auto x : ar)
std::cout << x << '\n';
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다