整数移动、

该文章讨论了一段C++代码,其功能是将一个整数数组的元素按照指定位置移动,后面的元素移到前面。文章解释了数组和指针在C++中的工作原理,以及在函数调用中实参数组和形参数组的区别。示例代码展示了如何实现数组元素的移动,并提供了输入输出示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

描述

有n个整数,使前面各数顺序向后移m个位置,最后m个数变成前面m个数。写一函数:实现以上功能,在主函数中输入n个数和输出调整后的n个数。

输入

输入数据的个数n, n个整数, 移动的位置m

输出

移动后的n个数

输入样例 1 

10
1 2 3 4 5 6 7 8 9 10
2

输出样例 1

9 10 1 2 3 4 5 6 7 8

输入样例 2 

5
2 4 6 8 1
3

输出样例 2

6 8 1 2 4

提示

输出结果的最后一个数后没有空格

#include <iostream>
using namespace std;
int yidong(int a[],int,int);
int a[100], b[100];
int main()
{
	int n,m;
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i];
	}
	cin >> m;
	*b=yidong(a,n,m);
	for (int i = 1; i <= n; i++)
	{
		cout << b[i]<<" ";
	}
}
int yidong(int a[], int n ,int m)
{
	int i,k ;
	for (i = n; i > 0; i--)
	{
		k = (i + m) % n;
		if (k == 0)k = n;
		b[k] = a[i];
	}
	return *b;          //返回数组头指针
}

问题点:

①:在C和C++中,数组名代表数组中第一个元素的地址,而不是代表整个数组。p=&a[0];与p=a;等价。

②:数组名后面的方括号实际上是变址运算符。对a[i]的求解过程是:先按a+i*d计算数组元素的地址,然后找出此地址所指向的单元中的值。

③:自定义函数的形参写成数组形式的如 int arry[ ],但在编译时是将形参数组名arry按指针变量处理,相当于int *arry。这两种写法完全等价。实际上在函数调用时并不存在一个占有存储空间的形参数组,只有指针变量。

④:实参数组名a代表一个固定的地址,或者说是指针型常量,因此不可能改变a的值。

如   a++;      //语法错误,a是常量,不能改变

但形参数组名是指针变量,并不是一个固定的地址值,它的值是可以改变的。在函数调用开始时,它接收了实参数组首元素的地址,但在函数执行期间,它可以再被赋值。

如:f(arry[ ],int n)

{cout<<arry;            //输出arry[0]的值

arry=arry+3;                //指针变量arry的值改变了,指向arry[3]

cout<<*arry<<endl;}        //输出arry[3]的值

⑤:在用变量作函数参数时,只能将实参变量的值传给形参变量,在调用函数过程中如果改变了形参的值,对实参没有影响,即实参的值不因形参的值改变而改变。

而用数组名作函数实参时,如果改变了形参数组元素的值将同时改变实参数组元素的值。

 如图所示,假设实参数组a的起始地址为1000,则形参数组b的起始地址也是1000,由于实参数组和形参数组类型相同,因此,a[0]与b[0]为同一单元,以此类推。因此,形参数组中各元素的值如发生变化就意味着实参数组元素的值发生变化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值