在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; }
r8xiu3jd1#
此功能
返回一个指针,指向具有自动存储持续时间的本地数组中的第一个元素,该元素在退出函数后将不再活动。因此,返回的指针将是无效的,并且取消引用这样的指针会调用未定义的行为。如果数组是动态分配的,或者具有静态存储持续时间(即使用存储类说明符static声明时),则可以从函数返回指向数组第一个元素的指针。对于第一个函数,如果您也传递数组中的元素数(如
static
void function_a(int *return_array, size_t n );
并且在函数中您将能够检查传递的值。
zqdjd7g92#
我最喜欢:
void function_a(int return_array[const], size_t sz) { return_array[0] = 1; return_array[1] = 0; }
因为它清楚地指示参数是Array,而且它还清楚地指示传入的数组的大小,所以使超出边界的索引不太可能成为问题。
2条答案
按热度按时间r8xiu3jd1#
此功能
返回一个指针,指向具有自动存储持续时间的本地数组中的第一个元素,该元素在退出函数后将不再活动。
因此,返回的指针将是无效的,并且取消引用这样的指针会调用未定义的行为。
如果数组是动态分配的,或者具有静态存储持续时间(即使用存储类说明符
static
声明时),则可以从函数返回指向数组第一个元素的指针。对于第一个函数,如果您也传递数组中的元素数(如
并且在函数中您将能够检查传递的值。
zqdjd7g92#
我最喜欢:
因为它清楚地指示参数是Array,而且它还清楚地指示传入的数组的大小,所以使超出边界的索引不太可能成为问题。