gpt4 book ai didi

c - 交换 2 个空指针地址

转载 作者:行者123 更新时间:2023-12-02 01:30:04 24 4
gpt4 key购买 nike

我需要创建一个交换函数,该函数将 2 个地址作为输入并交换它们,无论它们指向什么类型。这是我的交换函数:

void swap(void* x,void* y){
void* temp=x;
x=y;
y=temp;
}

当我将它与整数一起使用时,它工作正常并正确交换它们,但使用字符串时,地址似乎在函数内部交换,但当我尝试从函数外部调用它们时,我注意到它们根本没有改变。

这是我的完整代码和结果输出。

  printf("before %s %s\n",(char*)array[i],(char*)array[j] );
swap(array[i], array[j]);
printf("after %s %s\n",(char*)array[i],(char*)array[j] );

我将所有内容都转换为字符串以了解它们出了什么问题

void swap(void* x,void* y){
printf(" after IN %s %s\n",(char*)x,(char*)y );
void* temp=x;
x=y;
y=temp;
printf(" after IN %s %s\n",(char*)x,(char*)y );
}

输出

before fannullone falafel
after IN fannullone falafel
after IN falafel fannullone
after fannullone falafel

最佳答案

要交换函数中的两个对象,您需要通过引用将它们传递给函数。

在 C 语言中,通过引用传递意味着通过指向对象的指针间接传递对象。因此,取消引用指针后,函数可以直接访问原始对象并可以更改它们。

因此,对于 void * 类型的对象,函数参数将具有 void ** 类型。该函数看起来像

void swap( void **x, void **y )
{
void *temp = *x;
*x = *y;
*y = temp;
}

这是一个演示程序。

#include <stdio.h>

void swap( void **x, void **y )
{
void *temp = *x;
*x = *y;
*y = temp;
}

int main( void )
{
void *s1 = "Hello";
void *s2 = "World";

printf( "s1 = %s, s2 = %s\n", ( char * )s1, ( char * )s2 );

swap( &s1, &s2 );

printf( "s1 = %s, s2 = %s\n", ( char * )s1, ( char * )s2 );
}

程序输出为

s1 = Hello, s2 = World
s1 = World, s2 = Hello

关于c - 交换 2 个空指针地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73539205/

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