这个代码是否使用sizeof运算符定义好了?

#include <stdio.h>

void test(int arr[]);

int main ()
{
    int *arr[3];
    int ar1[2] = { 1,2 };
    int ar2[3] = { 3,4,5 };
    int vla[ar2[1]];
    arr[0] = ar1;
    arr[1] = ar2;
    arr[2] = vla;

    for  (int i = 0; i < 3; i++)
    {
        test(arr[i]);
    }
}

void test(int arr[])
{
    printf("%zu\r\n",sizeof(arr));
}

标题说:这是有效的吗?如果是,有没有办法使test()通过使用sizeof on function参数在数组上输入不同的值?

解决方法

是的,它是有效的,并给出一个int指针的大小(这是arr参数的类型,C中没有数组参数)(以字节为单位). 1

要使用sizeof获取字节数组的大小,该参数必须是实际的数组,而不是指针.

因此,不可能获取作为参数传递给函数的数组的大小,而不传递指定大小的额外参数.

所以,

is there a way to make test() output different values by using sizeof on function argument handed in like on array?

没有. (不编辑功能体)

1如果您想知道如何将数组作为指针参数传递,那就是因为隐式的数组到指针转换(称为array decaying).

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...