2401_87109954 2024-12-23 08:36 采纳率: 100%
浏览 57
已结题

[C语言]使用指针排序遇到的一些问题

#我希望使用通过创建一个整形数组的指针数组 来实现不改动整形数组元素的排序 最终目的是只需要按顺序输入重新排序过的指针数组中的每个元素就能输出 就可以通过指针输出整形数组的每个元素

#include <stdio.h>


//定义排序函数
void test(int**x,int**y)
{
    int* t = 0;
    t = *x;
    *x = *y;
    *y = t;
} 


//三种输出方式
void put_out1(int *a, int n)
{    
    for(int i =0;i<n;i++)
    {
        printf("%d ",a[i]);
    }
        printf("\n");
}
void put_out2(int *a, int n)
{    
    for(int i =0;i<n;i++)
    {
        printf("%d ",*(a+i));
    }
        printf("\n");
}
void put_out3(int **a, int n)
{    
    for(int i =0;i<n;i++)
    {
        printf("%d ",*a[i]);
    }
        printf("\n");    
}


int main(void)
{
    int a[2] = {0,1};
    int n = 2;
    
    int* p1 = &a[0];
    int* p2 = &a[1];
    
    //printf("*p1=%d,*p2=%d\n",*p1,*p2);
    
    int** p3 = &p1;
    int** p4 = &p2;
    
    int* a_p[2];
    
    for(int i = 0;i<n;i++)
    {
        a_p[i]=&a[i];
    }
    
    test(p3,p4);
    test(&a_p[0],&a_p[1]);
    
    printf("%d %d\n",*p1,*p2);//通过指针访问
    printf("%d %d\n",*a_p[0],*a_p[1]);//通过指针数组的元素访问
    
    put_out1(*a_p,2);//方式一
    put_out2(*a_p,2);//方式二
    put_out3(a_p,2);//方式三
}

输出结果:两种用printf函数输出的方式都能输出1 0,但是put_out1和put_out2这两种函数只能正常输入1 后面输出了一个内存地址

请问为什么会有这种现象 都有什么相关知识点 没有多少编程基础 大一刚学c语言

  • 写回答

30条回答 默认 最新

问题事件

  • 系统已结题 1月1日
  • 已采纳回答 12月24日
  • 创建了问题 12月23日