黑马程序员技术交流社区

标题: 指针向函数的指针 [打印本页]

作者: 踏出梦想的轨迹    时间: 2014-8-6 17:52
标题: 指针向函数的指针
#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的值没有互换,哪里出问题了,是不是这种方法调用的函数还是值传递,地址的形参不能传递给实参?
要怎么改?


作者: ★彬★卍囧神    时间: 2014-8-6 19:02
  1. void swap(int *v1, int *v2)
  2. {
  3.     int temp;
  4.     temp = *v1;
  5. *v1 = * v2;
  6. *v2 = temp;
  7. }
复制代码
我绝的是这样.

作者: 从今以后    时间: 2014-8-6 20:27
指针变量也要遵循“值传递”,因而两个指针变量并未完成交换,楼上是直接操作指针变量指向的内存地址,两个地址存储的值已经被交换了
作者: cjfire    时间: 2014-8-6 21:53
你的这个程序运行过么?并没有看到有关于a2和b2的定义啊?!
作者: -(_)-    时间: 2014-8-7 09:32
楼主你的程序定错了吧, 看你的swap方法没有问题, 你的a2跟b2哪来的. 你这样这程序应该编译都过不了啊
作者: cjfire    时间: 2014-8-7 10:33
  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. }
复制代码

作者: cjfire    时间: 2014-8-7 11:33
这是对程序的讲解

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

无标题.png

作者: 陆习康    时间: 2014-8-7 15:05
楼主的代码写的有点问题,a2,b2  main函数没有定义,在swap中交换值,交换的有点不对,楼上的代码已经为您解决了,希望楼主把指针这块的视频再看看,相信楼主很快就能明白
作者: 卡哇伊    时间: 2014-8-8 10:01
这样互换的题 有三种做法
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;
完事 各种解。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2