gpt4 book ai didi

c - 在没有临时变量的情况下交换 2 个函数指针

转载 作者:行者123 更新时间:2023-11-30 20:37:59 25 4
gpt4 key购买 nike

交换两个 void 指针很容易,无需使用任何额外的内存:

void* p1;
void* p2;

//...

p1 = ((uintptr_t)p1) ^ ((uintptr_t)p2);
p2 = ((uintptr_t)p1) ^ ((uintptr_t)p2);
p1 = ((uintptr_t)p1) ^ ((uintptr_t)p2);

但是要交换函数指针我必须使用另一个指针吗? (因为不能保证它们适合任何整数类型)。

void (*p1)();
void (*p2)();

//...

void (*tmp)() = p1;
p1 = p2;
p2 = tmp;

任何人都可以给我一个完全可移植的方法的示例,该方法将在不使用临时变量的情况下交换函数指针吗?

最佳答案

我认为这是可行的,因为允许通过(无符号)字符使用别名:

void (*p1)();
void (*p2)();

for (size_t i = 0; i < sizeof(p1); ++i) {
((unsigned char *)&p1)[i] ^= ((unsigned char *)&p2)[i]
}
for (size_t i = 0; i < sizeof(p2); ++i) {
((unsigned char *)&p2)[i] ^= ((unsigned char *)&p1)[i]
}
for (size_t i = 0; i < sizeof(p1); ++i) {
((unsigned char *)&p1)[i] ^= ((unsigned char *)&p2)[i]
}

关于c - 在没有临时变量的情况下交换 2 个函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31053212/

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