交换两个数组元素的地址可以交换它们的值吗?

来源:互联网 发布:白金数据 豆瓣 书 编辑:程序博客网 时间:2024/05/17 03:44
#include<stdio.h>void SWAP(int *a,int *b){int *e;e=a;a=b;b=e;}void main(){int i;int A[2]={0,1};SWAP(&A[0],&A[1]);printf("the sorted num is:\n");for(i=0;i<2;i++)    printf("A[%d]=%2d\n",i,A[i]);}

我们知道交换两个整数的地址可以交换两个整数的值。但是在数组中我们交换两个数组元素的地址它的输出结果会是A[0]=1,A[1]=0吗?答案是否定的。
原因
数组的实质是一段连续分配的指针,如果你定义了 int a[2]那么变量 a 就是指向开头的指针,a+1 即下一个,依此类推取元素值的操作 a[n] 实际上就是 *(a+n) 所以就算你真的“交换”了,a[n]的值还是不会变。
正确的代码

void SWAP(int *a,int *b){int e;e=*a;*a=*b;*b=e;}

输出结果
这里写图片描述

0 0
原创粉丝点击