zhongxm 发表于 2015-5-3 14:13:12

C视频 指针篇,第二讲

此讲中第二个案例,使用函数按大小顺序打印两个数,视频中讲解的是使用函数交换指针地址中的数据。
我测试的是使用函数交换指针地址,结果交换后的指针地址不会转递给主函数。
代码如下,望高人点拨:
void swap(int *p1, int p2);

void main()
{
        int a, b;
        int *pointer_1, *pointer_2;

        scanf("%d %d", &a, &b);

        pointer_1 = &a;
        pointer_2 = &b;
        printf("%d,%d\n", pointer_1, pointer_2);

        if(a < b)
        {
                swap(pointer_1, pointer_2);
        }
       
        printf("%d, %d\n", pointer_1, pointer_2);
        printf("max = %d, min = %d\n", *pointer_1, *pointer_2);
}

void swap(int *p1, int *p2)
{
        int *p;

        p = p1;
        p1 = p2;
        p2 = p;
}

雪是梅之香 发表于 2015-5-3 23:37:09


void swap(int *p1, int *p2)
{
      int p;
      

      p = *p1;
      *p1 = *p2;
      *p2 = p;
}

void main()
{
      int a, b;
      int *pointer_1, *pointer_2;

      scanf("%d %d", &a, &b);

      pointer_1 = &a;
      pointer_2 = &b;
      printf("%d,%d\n", *pointer_1, *pointer_2);

      if(a < b)
      {
            printf("success\n");
                swap(pointer_1, pointer_2);
      }

      printf("%d, %d\n", *pointer_1, *pointer_2);
      printf("max = %d, min = %d\n", *pointer_1, *pointer_2);
}

zhongxm 发表于 2015-5-6 00:39:09

雪是梅之香 发表于 2015-5-3 23:37


这是交换内存地址中的数据,是可以实现,但是函数如果交换的是内存地址,就不能实现。
我单步调试过了,函数运行后,指针变量中的地址是交换了,但是函数值不返回

zhongxm 发表于 2015-5-6 00:51:45

如果直接使用if语句交换内存地址,就可以实现
void main()
{
       
        int a, b;
        int *pointer_1, *pointer_2, *p;
        scanf("%d %d",&a, &b);

        pointer_1 = &a;
        pointer_2 = &b;

        if(a < b)
        {
                p = pointer_1;
                pointer_1 = pointer_2;
                pointer_2 = p;
        }
        printf("%d,%d\n",pointer_1,pointer_2);
        printf("max = %d, min = %d\n", *pointer_1, *pointer_2);
}

雪是梅之香 发表于 2015-5-8 16:35:11

zhongxm 发表于 2015-5-6 00:39
这是交换内存地址中的数据,是可以实现,但是函数如果交换的是内存地址,就不能实现。
我单步调试过了, ...

楼主我发的代码里定义的p是一个整数,不是一个指针,所以可以实现你的要求
页: [1]
查看完整版本: C视频 指针篇,第二讲