本文共 1558 字,大约阅读时间需要 5 分钟。
//定义一个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就是数组的首地址(那么数组名就是指针,而且是一个常量指针,不能重指向)
//数组名中存放的地址和数组中第一个元素的地址是同一个地址
//指针类型在内存中所占的字节大小和指针的类型无关,只和操作系统的位数有关,32位下占4个字节,64位下占8个字节
//定义一个指针的时候,一定要赋初始值,否则,指针里存放的地址是任意的.不赋初值的指针,称为野指针,操纵野指针是很危险的.
//多个指针可以指向同一个地址