/************************************
利用指针实现:
1) 有序数组元素的倒序输出;
2) 实现无序数组元素的有序输出;
************************************/
#include<stdio.h>
#define N 10
int main() {
int arr[N];
int* p;
p = arr;
int i;
int j;
printf("Please enter number to populate the array!\n");
for (i = 0; i < N; i++) {
scanf(" %d", p + i);
}
for (p = arr; p < (arr + N); p++) {
printf("%d ", *p);
}
p = arr;
/* 此处需要将p指向的地址,重新定义到数组的首元素地址。
* 因为在for循环中已经将p指向的地址偏移到了数组最后一个元素的地址之后。
* 如果不重新初始化p的指向,下次访问会导致越界,出现段错误。
*/
printf("\n");
// 冒泡排序
for (i = 0; i < N - 1; i++)
{
// 外层循环记录比较的位置
for (j = i; j < N - 1; j++) {
// 内层循环控制比较的元素
if (*(p + j) > *(p + j + 1)) {
*(p + j) ^= *(p + j + 1);
*(p + j + 1) ^= *(p + j);
*(p + j) ^= *(p + j + 1);
// 运用(^运算符)的本质还是中间变量;
}
}
}
for (p = arr; p < (arr + N); p++) {
printf("%d ", *p);
}
p = arr;
printf("\n");
int* q = arr + (N - 1);
// 倒序输出
while (p != q) {
*p ^= *q;
*q ^= *p;
*p ^= *q;
p++;
q--;
}
for (i = 0; i < N; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}