二重指针实现排序

 1 //双指针对十个数排序
 2
 3 #include <stdio.h>
 4 #include <stdlib.h>
 5 #define N 8
 6 //2017.3.5
 7 int main()
 8 {
 9     //初始化数组 赋值N个数 用指针数组指向
10     int num[N];
11     int *pNum[N];
12     int **p = NULL;
13     for (int i = 0; i < N; i++)
14     {
15         num[i] = rand() % 100;//产生随机数
16         printf("%d\t", num[i]);
17         pNum[i] = &num[i];//这里方便二维指针
18     }
19     printf("\n");
20     p = pNum;
21     for (int i = 0; i < N; i++)
22     {
23         for (int j = i + 1; j < N; j++)
24         {
25             if (**(p + i) >= **(p + j))
26             {
27                 int temp = **(p + i);
28                 **(p + i) = **(p + j);
29                 **(p + j) = temp;
30             }
31         }
32     }
33     //打印结果
34     for (int i = 0; i < N; i++)
35     {
36         printf("%d\t", **(p + i));
37     }
38     getchar();
39     return 1;
40 }

时间: 03-08

二重指针实现排序的相关文章

C语言 二重指针深入理解

k->[sss] ------>k是指针,指向内存区,内存区存的数据是sss   ,那么,*K的内容就是sss           (*k)<==>sss sss->[hhh]---->sss是新的地址,是指针,指向内存区域,内存区域的数据是hhh,那么,*sss的内容就是hhh     (*sss)<==>hhh 综上所述,二重指针(*(*k))=====>就等于hhh 也就是取k地址的内容作为一个新的地址,然后再取这个新的地址的内容 2.思考链表

一重指针和二重指针

今天从函数传参的角度来理解指针.如果想交换两个变量a,b的值,我们会这么做: int temp; temp = a; a = b; b = a; 如果要把以上功能封装成一个函数,最开始的反应是: func(int a,int b) { int temp; temp = a; a = b; b = a; } 但是func(a,b);这个函数执行完之后,a和b的值并没有交换.变换的只是函数内部的临时变量.以上这种方式无法改为函数外部的变量——a和b. 那么在函数的内部如何改变外部的变量呢,答案是指针

结构体指针排序

输入不超过30名学生的信息,包括姓名,单科分数,出生年月,对其排序后输出. 运用知识点:结构体.指针.排序.函数. 1 #include<stdio.h> 2 #include<string.h> 3 4 struct birth 5 { 6 int y; 7 int m; 8 int d; 9 }; 10 struct student 11 { 12 int num; 13 char name[20]; 14 double score; 15 struct birth birth

C指针与内存

C指针与内存 指针是C / C++ 中重要的构造类型,指针赋予了C / C++程序直接访问和修改内存的能力.C / C++的许多重要应用,如编译.OS.嵌入式开发都依赖于这种能力. 冯诺依曼体系的计算机内存存储指令和数据,我们可以将其抽象为指令区和数据区(当然实际情况要复杂得多).数据区中包含栈(stack)和堆(heap)区,栈区的数据由编译器管理而堆区数据则由程序员管理. 由于指令同样存在于内存中,那么函数在内存中也会拥有地址(指针). 函数指针相对于函数名来说 可以在运行期动态地选择调用的

高效的C指针

cnyinlinux 指针,被称做C语言编程的精华.其闻名数十年的秘诀在于,高效二字.今天我们讲的就是,指针是如何做到了这一切的. 经常你会看到这样的形式: XXX * func(int para1,-)://函数参数略 函数的返回值类型为指针,为何要返回一个指针呢? 指针在C中代表的是一片内存,也就意味着该函数返回时,将一片内存带给了原调函数(调用该函数的函数称为原调函数).这样做的目的是将函数处理结果存于内存,直接把存储地址返回.这样原调函数在获取结果的时候不必要再复制数据,直接在返回指针指

【转】 指针函数与函数指针的区别

一. 在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义: 1.指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某一类型的指针 类型标识符    *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个地址值.函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量. 表示: float *fun();

值传递,指针传递;引用传递(c++独有)本质

要理解值传递.指针传递和引用传递的区别,主要要理解函数的实参和形参,函数的作用域(自动变量.栈),内存的布局以及指针和引用的特点.这里主要总结三种参数传递方式使用的主要场合. 值传递:只给函数提供输入值,需要复制开销,大对象很少使用值传递. 指针传递:可以改变指针指向内容的值,但是不能改变指针本身,无需复制开销.如果需要改变指针本身,可以使用二重指针或者指针引用. 引用传递:除了提供输入值外,还返回操作结果,无需复制开销. #include<stdlib.h> //值传递,函数体内变量n是参数

待字闺中之巧妙排序分析:

题目来源.待字闺中.原创@陈利人 ,欢迎大家继续关注微信公众账号"待字闺中" 排序仅仅有1.2,3三个元素的数组.不能统计1,2.3的个数. 分析:这个题目,虽然也是排序,但却不能使用高速排序的方法.仅仅有三个元素,假设时间复杂度仍旧是O(nlogn).显然不是最好的.那就行使用线性的排序算法,比如计数排序.但是题目中要求,不可以对1,2,3进行统计个数.那该怎样处理呢?请大家看以下的方法,我们首先通过样例来说明: 2 1 1 3 3 2 p1 p2       p3 如果,我们有三个

深入理解 [指针函数] 、[函数指针]、[指针的指针]、[指向指针数组的指针]

指针函数 1.指针函数是指带指针的函数,即本质是一个函数.当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用函数,以用于需要指针或地址的表达式中. 函数返回类型是某一类型的指针: 格式: 类型标识符  *函数名(参数表) int *match(void *key_x,void *key_y); 解析:首先来说它是一个函数,只不过这个函数的返回值是一个地址值.函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针