c - 静态分配的数组作为 C 中的函数参数

标签 c arrays static allocation

我可以在 C 中这样做吗:

void myFunc(int *vp) {
    // do some stuff with vp
}

int main() {

    int v[5] = {1,2,3,4,5};
    myFunc(v);

    return 0;
}

我的意思是,什么是正确的?我的函数(&v); ?

谢谢!!

最佳答案

当您将数组作为参数传递时,它们会退化为指针。但是,数组衰减与获取数组地址不同。

“衰减”是某些类型在作为函数参数传递时的转换方式。尽管 v 的类型是 int [5],但当您将它传递给函数时,它会变成 int*。这是很多人不喜欢的行为,但对此无能为力。

请注意,另一方面,&v的类型是int (*)[5],即指向一个包含5个整数的数组的指针。这种类型不会衰减,也就是说,如果您将它作为函数参数传递,它不会自动转换为另一种类型(这也是为什么如果您在示例中使用它,它就不起作用,因为您需要一个指针到整数,而不是指向整数数组的指针)。

“正确”要做的事情(假设衰减没问题)是执行 myFunc(v),就像您在代码片段中所做的那样。请记住,这样做会丢失数组边界信息。

关于c - 静态分配的数组作为 C 中的函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19019473/

相关文章:

c - 1's and 0' 到十六进制的数组

c - 什么是 "false positive"?

javascript - 如何使用 Javascript 将嵌套 JSON 映射到 HTML 表

c++ - static int 执行了多少次?

java - 每个 python 对象一个 int

c - 如何从C数组中提取第三列?

c - Light C Unicode 库

java - (Java) 计算句子中的字母?

java - 子对象数组

php - 如何创建从数据库中动态提取的静态 WordPress 页面?