A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 踏出梦想的轨迹 中级黑马   /  2014-8-6 17:52  /  1244 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

#include <stdio.h>
void swap(int *v1, int *v2);
int main()
{
    int a = 90;
    int b = 89;
    swap(&a2, &b2);
    printf("a2=%d, b2=%d\n", a, b);
    return 0;
}
void swap(int *v1, int *v2)
{
    int *temp;
    temp = v1;
    v1 = v2;
    v2 = temp;
}
为什么用指针方法a和b的值没有互换,哪里出问题了,是不是这种方法调用的函数还是值传递,地址的形参不能传递给实参?
要怎么改?

8 个回复

倒序浏览
  1. void swap(int *v1, int *v2)
  2. {
  3.     int temp;
  4.     temp = *v1;
  5. *v1 = * v2;
  6. *v2 = temp;
  7. }
复制代码
我绝的是这样.
回复 使用道具 举报
指针变量也要遵循“值传递”,因而两个指针变量并未完成交换,楼上是直接操作指针变量指向的内存地址,两个地址存储的值已经被交换了
回复 使用道具 举报
你的这个程序运行过么?并没有看到有关于a2和b2的定义啊?!
回复 使用道具 举报
楼主你的程序定错了吧, 看你的swap方法没有问题, 你的a2跟b2哪来的. 你这样这程序应该编译都过不了啊
回复 使用道具 举报
  1. #include <stdio.h>
  2. void swap(int *v1, int *v2);
  3. int main()
  4. {
  5.     int a = 90;
  6.     int b = 89;
  7.     swap(&a, &b);
  8.     printf("a=%d, b=%d\n", a, b);
  9.     return 0;
  10. }
  11. void swap(int *v1, int *v2)
  12. {
  13.     int temp = *v1;
  14.     *v1 = *v2;
  15.     *v2 = temp;
  16. }
复制代码
回复 使用道具 举报
这是对程序的讲解

无标题.png (45.94 KB, 下载次数: 29)

无标题.png
回复 使用道具 举报
楼主的代码写的有点问题,a2,b2  main函数没有定义,在swap中交换值,交换的有点不对,楼上的代码已经为您解决了,希望楼主把指针这块的视频再看看,相信楼主很快就能明白
回复 使用道具 举报
这样互换的题 有三种做法
1, int temp = a ;
         a = b ;
         b = temp;

2种:a = a  ^ b
          b = a  ^ b
          a = a ^ b
3种: a = b - a;
           b = b - a;
           a = b  + a;
完事 各种解。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马