c - 这段代码是否使用 sizeof 运算符定义得很好?

标签 c arrays 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));
}

正如标题所说:这有效吗?如果是这样,是否有办法通过对函数参数使用 sizeof 来使 test() 输出不同的值,就像在数组上一样?

最佳答案

是的,它是有效的,并将给出一个 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 - 这段代码是否使用 sizeof 运算符定义得很好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34772313/

相关文章:

objective-c - uint8_t 转二进制补码函数

javascript - 采用对象数组的函数拒绝自制数组

c - 在一行中打印十六进制数组的所有元素

c - 如何获取 const char 指针的大小

c++ - 使用 memset 将派生结构归零

c++ - 未声明的结构不会导致警告

c - STM32 Discovery 在线程之间共享变量

c - 从 C 中的文本文件中读取

java - 将字节数组转换为 double 组

c++ - 具有菱形继承结构的子类的大小似乎很奇怪