首页 > 解决方案 > 在将数组传递给函数时,要求编译器将数组视为数组(而不是指针)

问题描述

我想sizeof在将数组传递给函数后使用运算符,但 C 语言将其视为指针而不是数组。

我们可以实现一个功能来解决这个目的吗?

void foo(char array[])
{
    printf("sizeof array = %u\n", sizeof(array)); /* I know array is pointer here */
}

int main(void)
{
    int array[5];
    foo(array);
}

标签: carrays

解决方案


不可能,并且使用数组下标[]可能会让不知道它将表现为指针的人感到困惑。我采用的方法是将长度作为另一个参数传递或创建一个带有指针和长度的结构:

struct {
    char * buffer;
    size_t length;
} buffer_t;

我不喜欢 struct 或 typedef 方法中的数组,因为它将数据限制为固定大小。


推荐阅读