C语言笔记:关于通过指针来交换两个变量的值

先放上书中例题:

#include<stdio.h>
void interchange(int*u, int*y);
int main(void)
{
       int x = 5, y = 10;
       printf("Originally x=%d and y=%d.\n", x, y);
       interchange(&x, &y);
       printf("Now x = %d and y = %d.\n", x, y);
              
        return 0;
}
void interchange(int*u, int*v)
{
       int temp;
       temp = *u;
       *u = *v;
       *v = temp;
}
在这里产生了一个疑问,main()函数向interchange()函数传递了两个值得地址
然后该函数对这两个指针指向的int的数值进行了交换
那么问题在于,到底是两个变量的数值进行了交换还是这两个变量的地址进行了交换?
为了便于思考这个问题,我在程序中加入了两个printf来打印x,y的地址
#include<stdio.h>
void interchange(int*u, int*y);
int main(void)
{
       int x = 5, y = 10;
       printf("Originally x=%d and y=%d.\n", x, y);
       printf("&x = %p, &y = %p\n", &x, &y);
       interchange(&x, &y);
       printf("Now x = %d and y = %d.\n", x, y);
       printf("Now &x = %p and &y = %p.\n", &x, &y);
       return 0;
}
void interchange(int*u, int*v)
{
       int temp;
       temp = *u;
       *u = *v;
       *v = temp;
}

从程序的输出可以看出: x, y的地址没有改变
那么interchange()函数改变的应该是两个变量的值
如果把&x看做是一个指针,作为实参进入interchange(),之后将指针所指向的值交换,所以最后改变的是两个变量的值

然而,然而书本后一页就讲这个,艹

 ̄へ ̄

1
说点什么

avatar
1 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
1 Comment authors
danisjiang Recent comment authors

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

  Subscribe  
最新 最旧 得票最多
提醒