C⼀C++,关于指针的问题,请赐教,问题在下面

2024-11-30 02:49:06
推荐回答(5个)
回答1:

分别对a和b输入值后没进行输出就调用了交换函数   所以第一次调用swap函数是实现了交换的   这时a=6,b=9;分别再对a和b以及a和b的地址进行输出(横线下的第一行),

再调用swap(p1,p2)后,同样进行了交换,结果为(横线下的第二行),再调用swap(&(*p1),&(*p2))后,a和b有交换了,输出结果为(横线下的第三行),所以三次调用swap函数都进行了a和b的交换

回答2:

p1是一个变量保存这a的地址。p2同理。&a不是变量,他是a的地址,像123之类的值。
swap(&a,&b)是,函数先定义2个临时变量保存a的地址和b的地址,函数执行时会交互2个临时变量的内容,所以&a和&b没有变化。
swap(p1,p2),因为p1和p2都是变量,就不会定义临时变量了,直接交互p1和p2内容

回答3:

请输入a和b的值:1 2
你输入的是a=2 ,b=1 ----->此处交换了一次swap(&a, &b)
-------------------
a=2,b=1,p1=%d,p2=%d ----->此处还是上一次的交换
a=1,b=2,p1=%d,p2=%d ----->此处还是上一次的交换swap(p1,p2)
a=2,b=1,p1=%d,p2=%d ----->此处还是上一次的交换swap(&(*p1),&(*p2))

swap函数只换指针所指向的值,并不会改变指针的值(地址)

回答4:

你把这两句交换一下位置就是你预期的结果了
swap(&a,&b);
printf("你输入的是a=%d ,b=%d\n-------------------\n",a,b);

回答5:

不懂