0%

C14 | 用指针实现逆序存放数组元素的值

读前福利:几百本互联网技术书籍送给大家https://mp.weixin.qq.com/s/dFqVQ2qJxvQ0YrIlPISJuw


1 题目

函数:invert()

功能:用指针实现逆序存放数组元素的值

描述:使用指针将数组中的元素值逆序放置,并且将结果打印出来

2 思路

1. 程序变量中两个数字进行交换的三种方法

第一种:引入一个中间量

1
2
3
temp=a;
a=b;
b=temp;

第二种:要注意的是a+b可能会超过int的范围,这个是该方法的缺点

1
2
3
a=a+b;
b=a-b;
a=a-b;

第三种:这种方法效率最高,推荐使用

1
2
3
a=a^b;
b=a^b;
a=a^b;

2. 指针的使用

使用指针对数组内容进行操作,数组 a, a 指向数组首位置,a+N-1 指向最后一位。从而利用循环对数组的首尾数字逐个替换

3 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <stdio.h> 
#include <stdlib.h>
#define N 10

/**
函数:invert()
功能:用指针实现逆序存放数组元素的值
描述:使用指针将数组中的元素值逆序放置,并且将结果打印出来
**/


void invert(int *a) {
int *begin, *end, mid; // 定义首尾指针
begin = a;
end = a+N-1;
mid = (N-1)/2; // 中间位置
int temp;
for (int i = 0; i <= mid; ++i){ // 循环,首尾指针内容变换
// temp = *begin;
// *begin = *end;
// *end = temp;
*begin = *begin ^ *end;
*end = *begin ^ *end;
*begin = *begin ^ *end;

++begin;
--end;
}
}


int main(int argc, char const *argv[]) {
int a[N] = {1,2,3,4,5,6,7,8,9,10};
printf("当前数组中的值为:");
for (int i = 0; i < N; ++i) {
printf("%d ", *(a+i));
}
printf("\n");

invert(a);
printf("使用指针逆序后数组中的值为:");
for (int i = 0; i < N; ++i) {
printf("%d ", *(a+i));
}
printf("\n");
}

示例结果:

1
2
3
4
$ gcc ex018.c -o demo
$ ./demo
当前数组中的值为:1 2 3 4 5 6 7 8 9 10
使用指针逆序后数组中的值为:10 9 8 7 6 5 4 3 2 1

最后

在这里给大家准备了几百本的互联网技术类书籍,需要的来下载吧!点击获取
有任何问题,欢迎随时交流!!!

------ 全文结束------