C从函数返回值最佳实践

ff29svar  于 2022-12-03  发布在  其他
关注(0)|答案(2)|浏览(138)

在C语言中,建议使用什么选项从函数返回数组?

选项1:

void function_a(int *return_array){
    return_array[0] = 1;
    return_array[1] = 0;
}

选项2:

int* function_b(){
    int return_array[2];
    return_array[0] = 1;
    return_array[1] = 0;
    return return_array;
}
r8xiu3jd

r8xiu3jd1#

此功能

int* function_b(){
    int return_array[2];
    return_array[0] = 1;
    return_array[1] = 0;
    return return_array;
}

返回一个指针,指向具有自动存储持续时间的本地数组中的第一个元素,该元素在退出函数后将不再活动。
因此,返回的指针将是无效的,并且取消引用这样的指针会调用未定义的行为。
如果数组是动态分配的,或者具有静态存储持续时间(即使用存储类说明符static声明时),则可以从函数返回指向数组第一个元素的指针。
对于第一个函数,如果您也传递数组中的元素数(如

void function_a(int *return_array, size_t n );

并且在函数中您将能够检查传递的值。

zqdjd7g9

zqdjd7g92#

我最喜欢:

void function_a(int return_array[const], size_t sz) {
    return_array[0] = 1;
    return_array[1] = 0;
}

因为它清楚地指示参数是Array,而且它还清楚地指示传入的数组的大小,所以使超出边界的索引不太可能成为问题。

相关问题