GeeksforGeeks에서 찾은 다음 C 프로그램의 결과를 찾고있었습니다. 여기에 프로그램이 있습니다 :이 코드의다음 C 프로그램의 출력을 어떻게 찾을 수 있습니까?
#include <stdio.h>
void fun(int ptr[])
{
int i;
unsigned int n = sizeof(ptr)/sizeof(ptr[0]);
for (i=0; i<n; i++)
printf("%d ", ptr[i]);
}
// Driver program
int main()
{
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8};
fun(arr);
return 0;
}
출력은 "1 2"이었다. 그러나 나에 따르면 출력은 단지 이어야합니다.
- 첫째, 주요 기능이 실행됩니다되는 배열을 선언 한 후 "편곡"다음 문은 문 재미 (편곡)를 포함하는 실행됩니다 : 다음은이 코드의 내 해석이다.
- 이 문장에서 "fun"함수는 배열의 첫 번째 요소의 주소를 포함하는 인수 arr과 함께 호출됩니다.
- 그 후에, 재미있는 fun의 밑에, 매개 변수로 포인터 ptr가있다. 이 함수가 실행될 때 ptr의 크기가 4이고 ptr [0]의 크기가 4이기 때문에 n의 값은 1로 계산됩니다.
- 다음으로 루프는 한 번만 실행되기 때문에 n이 1이면 ptr [0]의 값이므로 '1'만 인쇄됩니다.
제가 잘못 된 부분을 찾으십시오. ptr
의 크기 4
ptr[0]
하고 크기도 4
여기 이후
C에서는 검사만으로'재미 '의'ptr'(즉 요소의 수) 크기를 찾을 수 없다는 것에 유의하십시오.사용하는 sizeof 계산은 ptr이 고정 크기 배열 ('int ptr [5]'처럼) – pm100
@ pm100 일 경우에만 작동합니다. 어떤 길이의 배열도 그 배열에 전달할 수 있습니다. –
@WeatherVane, sizeof 계산은 항상 포인터 크기에 따라 1 또는 2를 반환합니다. C에서 검사하여 int [] int int * array의 크기를 찾을 수 없습니다. 함수에 길이를 덧붙여 야합니다 (또는 센티널 값을 가짐) – pm100