gpt4 book ai didi

c++ - 在 C++ 中将数组传递给函数的不同语法

转载 作者:行者123 更新时间:2023-12-02 16:23:08 25 4
gpt4 key购买 nike

#include <stdio.h>

void test2(int (&some_array)[3]){
// passing a specific sized array by reference? with 3 pointers?
}

void test3(int (*some_array)[3]){
// is this passing an array of pointers?
}

void test1(int (some_array)[3]){
// I guess this is the same as `void test1(some_array){}`, 3 is pointless.
}

int main(){
//
return 0;
}

以上3种语法有什么区别?我在每个部分都添加了评论,以使我的问题更加具体。

最佳答案

void test2(int (&some_array)[3])

这是传递对 3 个 int 数组的引用,例如:

void test2(int (&some_array)[3]) {
...
}

int arr1[3];
test2(arr1); // OK!

int arr2[4];
test2(arr2); // ERROR!
void test3(int (*some_array)[3])

这是传递一个指向 3 个 int 数组的指针,例如:

void test3(int (*some_array)[3]) {
...
}

int arr1[3];
test3(&arr1); // OK!

int arr2[4];
test3(&arr2); // ERROR!
void test1(int (some_array)[3])

现在,事情变得有点有趣了。

在这种情况下括号是可选的(它们在引用/指针的情况下不是可选的),所以这等于

void test1(int some_array[10])

这反过来只是语法糖

void test1(int some_array[])
(是的,数字被忽略了)

这反过来只是语法糖

void test1(int *some_array)

因此,不仅数字被忽略,而且它只是一个简单的指针被传入。任何固定数组都会衰减到指向其第一个元素的指针,这意味着任何数组都可以被传入,即使声明建议只允许 3 个元素,例如:

void test1(int (some_array)[3]) {
...
}

int arr1[3];
test1(arr1); // OK!

int arr2[10];
test1(arr2); // ALSO OK!

int *arr3 = new int[5];
test1(arr3); // ALSO OK!
delete[] arr3;

Live Demo

关于c++ - 在 C++ 中将数组传递给函数的不同语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65117640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com