C++学习 逆序输出

//#include "stdio.h"  
//
//void main()
//{
//	void reversal(int x[], int n);
//	static int a[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };    /* 建立一个数组并初始化 */
//	int i;
//	for (i = 0; i<10; i++)
//	{
//		printf("%d ", a[i]);
//	}
//	printf("\n ");
//	reversal(a, 10);                                /* 调用自定义涵数进行反向显示排序,并把数组a的起始地址传送给形式参数x */
//	for (i = 0; i<10; i++)
//	{
//		printf("%d ", a[i]);
//	}
//	printf(" ");
//
//}
//
//void reversal(int x[], int n)
//{
//	/* 定义形式参数 */
//	{
//		int m = (n - 1) / 2;                            /* 计算10个数需要循环几次,因为是两两调换第一个数组是x[0]故应该是int(9/2) */
//		int temp, i, j;                            /* 建立零时变量temp用于每次交换处理时零时存储x的值 */
//		for (i = 0; i <= m; i++)
//		{
//			j = n - 1 - i;                            /* 反向计算出被调换的数组下标,例如x[0] 对应的x[n-1-i]就是x[9] */
//			temp = x[i];
//			x[i] = x[j];
//			x[j] = temp;
//		}
//	}
//
//}
///* 次题需要注意的是:这里由于a[10]和x[10]是共同享内存地址位的所以进行交换后a[10]的实际值也就发生了改变 */




#include <stdio.h>  

void main()
{

	void reversal(int *x,int n);
	static int a[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; /* 建立一个数组并初始化 */
	int i;
	for (i = 0; i<10; i++)
	{
		printf("%d ", a[i]);
	}
	printf("\n");
	reversal(a, 10); /* 调用自定义涵数进行反向显示排序,并把数组a的起始地址传送给形式参数x */

	for (i = 0; i<10; i++)
	{
		printf("%d ", a[i]);
	}
	printf("\n");

}

void reversal(int *x, int n)
//int *x, n; /* 定义x为指针变量 */
{
	int temp, *p, *i, *j; /* 这里需要注意的是temp用与交换的时候临时存储数据的 */
	i = x; /* 利用指针变量i存储数组a的起始地址 */
	p = x + ((n - 1) / 2); /* 计算最后一次循环的时候数组a的地址 */
	j = x + n - 1; /* 计算数组a也就是a[9]的结束地址好用于交换 */
	for (; i <= p; i++, j--) /* 利用循环和指针进行数组元素值的交换 */
	{
		temp = *i; /* 用temp临时存储*i也就是循环中a实际的值 */
		*i = *j;
		*j = temp;
	}
}

/* 此例同样要注意到利用指针进行数组的操作同样改变了实际数组各元素的值 */





 在c/c++中利用数组名作为函数参数传递排序和用指针进行排序的例子。

  以上两个例子要非常注意,函数传递的不是数组中数组元素的真实值而是数组在内存中的实际地址。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值