代码的结果是什么?

时间:2016-10-23 08:21:36

标签: c arrays

请为我解释以下代码运行的结果。

#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

3 个答案:

答案 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 )。