답장을 보내 주셔서 감사합니다. 모두가이 기능의 작동 방식을 이해하는 데 도움이되었습니다.친구가 나에게 이해하지 못하는 스 니펫을 보냈습니다. 이게 어떻게 작동합니까?
친구가 나에게이 코드를 보냈다. 나는 보통 C 언어로 일하지 않는다. 그러나 이것은 나의 관심을 자극했다. 나는 어떤 일이 벌어지고 있는지 이해하려고 애 쓰면서 시간을 보냈지 만, 결국 나는 그것을 완전히 파악할 수 없었다. 나는 그것이 배열의 데이터 (그래, 내가 아는을 : \) 인쇄 단지 멋진 방법이라고 생각 처음
void knock_knock(char *s){
while (*s++ != '\0')
printf("Bazinga\n");
}
int main() {
int data[5] = { -1, -3, 256, -4, 0 };
knock_knock((char *) data);
return 0;
}
: 여기 코드는,하지만 난 그것을하지 않았다봤을 때 나는 놀랐습니다 'Bazinga'를 5 번 인쇄했는데 8 번 인쇄했습니다. 물건을 검색하여 포인터로 작업하고 있다고 생각했는데 (C의 경우 전체 아마추어), 여전히 이유를 파악할 수 없었습니다. 8. 조금 더 검색하여 찾았습니다. out 포인터는 일반적으로 C에서 8 바이트의 길이를 가지고 있으며, sizeof (s)를 루프 전에 인쇄함으로써 확인했다. 그리고 확실히 8이었다. 나는 이것이 포인터라고 생각했다. 그래서 그것은 Bazinga를 8 번 인쇄 한 것이 합리적입니다. 또한 Bazinga를 인쇄 문자열로 사용하는 이유는 나에게 분명했습니다. 배열의 데이터는 산만 함을 의미했습니다. 그래서 배열에 더 많은 데이터를 추가하려고 시도했지만, 확실히 8 번 인쇄를 계속했습니다. 그런 다음 배열의 첫 번째 숫자 인 -1을 변경하여 데이터가 실제로 무의미한 지 여부를 확인하고 이것이 혼란 스러웠던 곳입니다. 더 이상 8 번 인쇄하지 않았지만 한 번만 인쇄했습니다. 확실히 배열의 데이터는 미끼가 아니었지만 나에게있어서 무슨 일이 일어나는지 알 수 없었습니다.
이 함수는 char 포인터 (1 바이트)를 사용하여 int 값 (4 바이트)을 가리키고 있습니다 ..... – LPs
'printf ("% 08X - % 08X - % 08X \ n", data [0 ], data [1], data [2]);'함수 호출 전에 ... – LPs
정의되지 않은 동작을 호출하지 않습니까? – George