[英]C - using memcpy in function to assign value instead of return
尝试了解 C 中的 arrays 是如何工作的,以及 C 是如何工作的。 我想做一个 function 返回一个 2 元素数组并将该数组分配给一个变量。 首先我做到了;
int make_array(int i) {
int out[2] = {i, i + 1};
return (int) *out;}
int main(void) {
int arr[2] = { make_array(68) }; // should be {68, 69}
for (int i = 0; i < 2; i++) {
printf("%d, ", arr[i]);}
return 0;
>> 68, 0,
这是我能找到的唯一一种在不引发错误的情况下编写它的方法,它是 output 68, 0,而不是 68, 69,。 所以我尝试了这个;
void make_another_array(int j, void *vp) {
int out[2] = {j, j + 1};
memcpy(vp, &out, sizeof(int) * 2);}
int main(void) {
int *hotdog_water = malloc(sizeof(int) * 2);
make_another_array(68, hotdog_water);
for (int i = 0; i < 2; i++){
printf("%d, ", hotdog_water[i]);}
free(hotdog_water); hotdog_water = NULL;
return 0;}
function 将结果保存在某处而不是返回它。 最终结果似乎按照我想要的方式工作,但不从 function 返回的东西中分配值似乎很麻烦。 我确信有更好的方法来做这个特定的事情,但是这样做有什么根本错误吗? 如果我写一个指针指向所有东西的地方而不是使用返回,我会遇到什么问题? 是否有任何用于复制结果而不是返回结果的用例?
在调用例程提供的空间中返回数据是正常且常见的。 标准 C 库包括几个示例,例如:
scanf("%d%d", &a, &b)
将值存储在a
和b
中。frexp(float x, &e)
返回一个值并将另一个值存储在e
中。fread(array, size, number, stream)
在array
中提供number
值。如果您确实希望通过函数返回值机制提供两个值,则可以使用以下结构来实现:
struct foo { int v[2]; } make_array(int i)
{
return (struct foo) {{ i, i+1 }};
}
#include <stdio.h>
int main(void)
{
struct foo x = make_array(68);
for (int i = 0; i < 2; ++i)
printf("%d, ", x.v[i]);
printf("\n");
}
对于大型结构,C 实现通常实现返回机制,正如您使用指针所建议的那样: C 代码看起来像 function 代码中的结构体,调用例程的指针提供结构体,它作为 function 的参数。 返回时,function 使用该指针填充返回值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.