我可以在 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/