|
发表于 2013-11-13 08:07:00
|
显示全部楼层
/*
一般来说。C++头文件是在C的原头文件上去掉.h。
前面加上c。把所有函数都放进std命名空间
但是对于旧版编译器来说,可以用C的头文件(考虑到兼容问题),
新版编译器个人认为用最新的C++标准来使用最好,考虑到习惯命名空间这项功能
一般都会为主函数定义一个返回值(returned 0)来作为检测程序。
即
int main()
{
......;
return 0;
}
在函数定义的时候原文是这样写的
void reversal(x,n)
int x[],n; // 定义形式参数
其实这个是C语言中的 K&R 方法
一般我们都会同时定义
void reversal(int x[],int n)
文中出现这函数声明的地方是主函数,
或许你的编译器允许你这么做,
但为了兼容性,还有整体美观
应该在主函数上面声明这个函数。
说给编译器,你有这函数,让编译器去寻找
x并非数组名,而是一个指针常量,不能修改的值。
该值指向数组的开始地址
一般互换都是
t = a;
a = b;
b = t;
所以,这里应该是
j=n-1-i; // 反向计算出被调换的数组下标,例如x[0] 对应的x[n-1-i]就是x[9]
temp=x[i];
x[i]=x[j];
x[j]=temp;
原文:
printf("%d ",a);
这里输出的是地址
应该是这样
printf("%d ",a[i]);
*/
//修改后的程序
#include <cstdio>
void reversal(int x[],int n);
int main()
{
using std::printf;
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]);
}
std::printf("\n");
reversal(a,10); /* 调用自定义涵数进行反向显示排序,并把数组a的起始地址传送给形式参数x */
for (i=0;i<10;i++)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
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;
}
}
/*
评价:这个程序以本人来是作者经验不够
一般的数组都用宏定义(C语言)
或者用常量const(C++)来作为下标
而且程序带有浓厚的C语言
比如 K&R 定义函数
*/ |
|