나는 프로젝트 작업을하고 있으며, 지난 1 시간 동안 코드에서 버그를 찾으려고 노력했다. 더 면밀히 조사한 후에, 나는 문제가되어 버린 다소 이상한 것을 발견했습니다.초기 배열 요소의 주소가 같은지 비교하는 이유는 무엇입니까?
내 배열의 초기 요소 주소는 이상하게도 과 동일하게 비교됩니다. 내 코드를 구분하고 테스트 코드를 시도했는데 비슷한 결과가 나타납니다. 누군가이 이상한 행동을 설명 할 수 있습니까?
#include <stdio.h>
#include <string.h>
int main(void)
{
char buf[256];
char *p1 = buf;
char *p2 = buf + 3;
if (memcmp(p1, p2, sizeof(char *)) == 0) {
puts("equal...");
}
p1 = buf + 100;
p2 = p1 + 3;
if (memcmp(p1, p2, sizeof(char *)) == 0) {
puts("equal...");
}
return 0;
}
'memcmp는 (P1, P2를 원하는 ... '됩니다 * * 포인터의 주소를 비교하지. 그것은 하나, 그 값을 비교하지 않습니다. 그것이 무엇을하는 수를 비교하는 것입니다 'p1, p2 '에 의해 보관 유지되고있는 주소로 시작되는'sizeof (char *)'와 같은 아르바이트의 바이트 수. 거기에 아무것도 저장되어 있지 않기 때문에, 비교 결과는 미정 도리입니다. * undefined *의 많은 결과 중의 하나는, – dxiv