不点蓝字,我们哪来故事?
If the fear of ups in front of the rock, life can only ever be a backwater.
如果惧怕前面跌宕的山岩,生命就永远只能是死水一潭。
在学C语言的你,是否觉得指针简单呢,其实在一开始学习C语言的时候,小编也逛过许多论坛,看到写得最多的也是各种对指针的吐槽,直到前几天看了一次关于C++的直播,才发现指针真的没有大家说得那么难。
怎么说呢,指针简单来说也就是可以保存地址值的变量称为指针变量,因为指针变量中保存的是地址值,故可以把指针变量形象地比喻成地址箱。
那为什么到做题时会觉得很难呢,这很大程度上取决于你的老师给你出什么题,因为我看到那个清华直播讲师说的是很多老师在教C语言时其实是很无聊的,为什么呢,可能是太简单了哈,老师毕竟怎么说也是大佬级别的,教我们这些基础的可能也是没多大趣味
。
然后...为了增加难度,老师觉得学到后面就越来越有意思了,嗯嗯,那就随便把数据结构给你们先尝尝鲜呗,这一尝鲜...广大学生表示难啊,顿时对指针产生了怀疑
。加上什么数组,函数,一场从入门到放弃的表演就此上演
。
嘿嘿,故事就此打住,下面进入刷题模式:
题目描述:有n个整数,要求你编写一个函数使其向右循环移动m个位置
输入
输入n m表示有n个整数,移动m位
输出
输出移动后的数组
样例输入:
10 5
1 2 3 4 5 6 7 8 9 0
样例输出:
6 7 8 9 0 1 2 3 4 5
源代码如下:
#include <stdio.h>
int main() {
int m, n, sum;
scanf("%d%d", &sum, &m);
int q[sum];
int *t = q;
for (n = 0; n < sum; n++) {
scanf("%d", t++);
}
t = q;
for (n = 0; n < sum; n++) {
if (n == (sum)) {
printf("%d", *(t));
} else {
if (n < m) {
printf("%d ", *(t + sum - m));//1.此处需要注意指向的地址
t++;
if (n == (m - 1)) {
t = q;//2.此处容易忽略
}
} else {
printf("%d ", *t);
t++;
}
}
}
return 0;
}
To:需要注意的是代码中第一处注释中指向的地址,小编记得一开始是写得*(t+m),后来发现只适合调换那种一半(比如:10个调换5个),花费了一些时间在上面,望大家不要再踩坑哦。
运行结果如下:
小编的代码仅供参考哦,此题的解法当然也不只一种,也可以用Python,C++等其他语言来解题,想要交流可加入学习群哦,在公众号后台C语言资源里即可找到哦。