请为我解释以下代码运行的结果。
#include <stdio.h>
int get_array_size(int *arr){
return sizeof(arr)/sizeof(int);
}
int main(int argc, char const *argv[]){
int arr[10];
printf("%d\n", sizeof(arr)/sizeof(int));
printf("%d\n",get_array_size(arr));
printf("%d\n",arr[10]);
printf("%d\n",get_array_size(arr));
return 0;
}
是:
10
2
0
2
答案 0 :(得分:1)
所有尺寸都以字节为单位。
sizeof(arr)/sizeof(int) = size of array / size of int = 40/4 = 10
get_array_size(arr) = size of array pointer(which is 4) / size of int = 4/4 = 1.
arr[10] = the eleventh entry of array(array size=10). (undefined number).
答案 1 :(得分:1)
#include <stdio.h>
int get_array_size(int *arr){
return sizeof(arr)/sizeof(int);
}
int main(int argc, char const *argv[]){
int arr[10];
printf("%d\n", sizeof(arr)/sizeof(int));//10
printf("%d\n",get_array_size(arr));//1
printf("%d\n",arr[10]);//if a[9] adress=x a[10] prints undefined value from x+4 adress
printf("%d\n",get_array_size(arr));1
return 0;
}
当你调用函数时,局部变量arr
被赋予优先级,因此4/4在被调用时总是给出
答案 2 :(得分:1)
printf("%d\n", sizeof(arr)/sizeof(int));
sizeof(arr)以字节为单位返回数组的大小。因为它是一个长度为10的int数组,&#34; sizeof(arr)&#34;将是&#34; 10 * sizeof(int)&#34;。你用sizeof(int)来区分它。因此输出 10 。
printf("%d\n",get_array_size(arr));
这很有意思! 您正在传递&#34; arr&#34;的地址to get_array_size()。在该功能中,首先要获得地址大小。地址大小取决于您运行的计算机,即32位机器地址大小将为4字节,而在64位计算机中,它将为8字节。我认为你使用的是64位机器,因此sizeof(arr)返回8.但sizeof(int)是4bytes。因此有效地 8/4 = 2 。
printf("%d\n",arr[10]);
您的数组大小为10,因此您可以从arr [0]访问arr [9]。 arr [10]不是你的数组的一部分。该地址可能用于其他一些变量。你只是在写那个地址的任何东西。输出完全随机。我认为当你执行程序时该地址为0,所以输出为 0 。
printf("%d\n",get_array_size(arr));
这是重复打印(输出 2 )。