gpt4 book ai didi

c - 一个交换函数被 2 个不同的结构使用

转载 作者:太空狗 更新时间:2023-10-29 15:03:48 24 4
gpt4 key购买 nike

我想知道是否可以在两个不同的结构中使用 swap() 等 1 个函数来交换它们?例如,

typedef struct{
char a;
}one;

typedef struct{
int c;
}two;

swap(??,??){
// code to swap 2 elements
}

one arr[8];
arr[1].a='a';
arr[2].a='b';

two brr[8];
brr[1].c = 11;
brr[2].c = 12;

那么,基于此,交换函数是否可以交换结构中的元素?例如是否可以使用:1. 交换(arr[1],arr[2]);2. 交换(brr[1],brr[2]);

据我了解,由于两个结构(及其元素)的数据类型不同,因此无法完成此类操作。我一直想为我的项目制作一个模块化功能,因此非常感谢您的帮助。

谢谢。

最佳答案

您需要一个通用函数来代替交换内存地址:

void swap(void *a, void *b, size_t size)
{
void *tmp = malloc(size);
// you should make sure the memory allocation was successful

memcpy(tmp, a, size);
memcpy(a, b, size);
memcpy(b, tmp, size);

free(tmp);
}

您传递的不是元素,而是它们的地址:

swap(&arr[1], &arr[2], sizeof(one));

关于c - 一个交换函数被 2 个不同的结构使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29687777/

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