博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用指针形式 为数组随机赋值,并进行冒泡排序
阅读量:4088 次
发布时间:2019-05-25

本文共 1558 字,大约阅读时间需要 5 分钟。

题目:使用指针形式,对一个数组随机赋值,每个元素的取值范围是[40 90],并使用指针形式对数组进行冒泡排序(升序),最后打印出排序后的数组

//定义一个10个元素的数组    int arr[10] = {0};    int *p = arr;//定义一个指针变量,赋初值为数组的首地址(数组名arr即为数组的首地址,它是一个指针常量)        //随机生成10个元素的数组,并打印    for (int i = 0; i < 10; i++) {                *(p + i) = arc4random()%51 + 40;//arc4random()是随机取数函数,对[m n]范围内随机取数公式为: arc4random()%(n - m + 1) + m        printf("%d\t", *(p + i));    }                //冒泡排序    for (int i = 0; i < 10 - 1; i++) {//外层循环控制比较趟数(10个元素比较9趟)                for (int j = 0; j < 10 - i - 1; j++) {//内层循环控制每趟的比较次数(每趟比较的次数 + 第几趟比较 = 10), 10 - i - 1的作用也是为了防止数组越界            //冒泡排序的核心代码            if (*(p + j) > *(p + j + 1)) {                                //定义整形变量temp来交换相邻元素的值                int temp = *(p + j); //*(p + j)在这里用了指针形式表示了数组中元素的值, *是取地址符, *p就是取出指针变量p指向的地址处的值                                *(p + j) = *(p + j + 1);                                *(p + j + 1) = temp;                            }        }    }        printf("\n数组按升序排序后:\n");        //对排序后的数组重新打印,验证效果    for (int i = 0; i < 10; i++) {                printf("%d\t", *(p + i));    }

控制台运行示例:

本题主要考察对指针的理解, 指针与数组的结合使用.需要注意的几点:

//数组名a就是数组的首地址(那么数组名就是指针,而且是一个常量指针,不能重指向)

//数组名中存放的地址数组中第一个元素的地址是同一个地址

//
指针的算术运算
,
指针类型决定指针在做
+1
运算时
,
一次跳转多少个字节
   
/*
     int* +1   
跳转
4
     short* +1 
跳转
2
     long* + 1 
跳转
8(64
位操作系统的
)
     float* + 1
跳转
4
     double* + 1
跳转
8
     char* + 1 
跳转
1
    
     */

//指针类型在内存中所占的字节大小和指针的类型无关,只和操作系统的位数有关,32位下占4个字节,64位下占8个字节

//定义一个指针的时候,一定要赋初始值,否则,指针里存放的地址是任意的.不赋初值的指针,称为野指针,操纵野指针是很危险的.

//多个指针可以指向同一个地址

   *取值操作符   和   &取地址操作符  
   *后跟指针变量, 表示取出这个指针所指向内存处 存放的值
   &后跟变量,  表示取出这个变量在内存中的 地址
你可能感兴趣的文章
[重新解答]阿里笔试:去重和排序,重新输出Markdown格式
查看>>
链表快速排序
查看>>
O(nLogn)排序 :堆
查看>>
[重新解答]百度笔试:数组按频次排列
查看>>
多个单例对象,析构顺序模拟
查看>>
weak_ptr使用的几个实例
查看>>
225. 用队列实现栈
查看>>
Centos7使用分别使用编译安装和yum安装Python3.6环境
查看>>
Centos7配置阿里的kubernetes的yum源
查看>>
Kubeternetes部署时init的时候踩过的坑及解决方案
查看>>
(python版)Leetcode-11.盛最多水的容器
查看>>
(python版) Leetcode-1.两数之和
查看>>
(python版) Leetcode-15.三数之和
查看>>
OpenCV计算机视觉实战 - Task5 - 停车场车位识别【项目实战】(附完整代码)
查看>>
(python版) Leetcode-350.两个数组的交集 II
查看>>
OpenCV计算机视觉实战 - Task6 - 答题卡识别判卷【项目实战】(附完整代码)
查看>>
如何刷Leetcode?【从400到700到900的全网总结篇】
查看>>
(python版) Leetcode-2.两数相加
查看>>
(python版) Leetcode-21.合并两个有序链表 merge-two-sorted-lists
查看>>
OpenCV计算机视觉实战 - Task7 - 背景建模 & 光流估计
查看>>