C语言Pass by reference实现交换函数失效问题求助
你的C语言swap函数失效的原因及修正方案
核心错误分析
C语言仅支持值传递,不存在引用传递。你编写的swap函数中,形参a和b是实参指针c、d的副本——你在函数里交换的是这两个副本指针的指向,完全没有触及它们指向的内存中存储的整数数值,所以主函数里的原始变量值不会有任何变化。
正确的数值交换实现
要交换两个整数的数值,你需要通过指针解引用,直接操作它们指向的内存中的值,而不是交换指针变量本身。修正后的代码如下:
#include <stdio.h> void swap(int *a, int *b){ int temp; // 交换指针指向的内存中的整数 temp = *a; *a = *b; *b = temp; } int main() { int a = 78; int b = 98; int *c=&a; int *d=&b; swap(c,d); printf(" a is %d and b is %d \n",*c,*d); return 0; }
额外说明:如果要交换指针本身的指向
如果你的需求是让指针变量c和d互相交换指向(而不是交换它们指向的数值),则需要传递指针的指针(二级指针),因为要修改指针变量的值,必须传入它的地址。示例代码如下:
#include <stdio.h> void swap_ptr(int **a, int **b){ int *temp; temp = *a; *a = *b; *b = temp; } int main() { int a = 78; int b = 98; int *c=&a; int *d=&b; swap_ptr(&c, &d); printf(" c points to %d, d points to %d \n",*c,*d); return 0; }
内容的提问来源于stack exchange,提问作者Solruhama
相关产品推荐
相关产品推荐

