/*创题目叙述:建一个 invert 函数功能:将数组 a 中的数据按相反的顺序存放。
输入 n 个数(n < 100),调用 invert 函数,最后输出逆序存放的并输出。
要求:用指针实现 invert 函数的功能,否则按零分处理。
输入格式 两行 第一行一个数 n 第二行 n 个数
输出格式 一行 n 个数用空格隔开 。
*/
#include<stdio.h>//标准的输入和输出流
#include<stdlib.h>//system("pause")要用
void invert(int *str, int n);//数据倒序的具体实现函数
int main(void)//主函数
{
int a[99], n, i;//定义一个长度为99的整形数组,以及两个整形变量
printf("请输入你有多少个数字:\n");//提示用户输入相应信息
scanf_s("%d", &n);//将用户刚刚输入到缓冲区的数字读入
printf("请输入你的所有数字:\n");//提示用户输入相应信息
for (i = 0; i < n; i++)
{//利用for循环遍历,将用户刚刚输入到缓冲区的全部数字读入
scanf_s("%d", &a[i]);
}
invert(a,n);//调用函数,进行数据倒序
printf("转换后的数字为:\n");
for (i = 0; i < n; i++)
{//利用for循环,将数据倒序后的数字全部输出
printf("%d\t", a[i]);//利用\t使得每个数字和每个数字之间由一个空格符分开
}
system("pause");//将黑色窗口停留,用户按任意键后才会退出
return 0;//程序正常运行要返回一个
}
void invert(int* str, int n)
{
int* i, * j;//为什么要定义i和j为int类型的,因为它所指向的类型是int类型,指针的类型必须和它的指向的数据的类型相一致
int t = 0;//t是一个用于交换的临时变量
i = str;//i指针指向数组第一个元素,
j = str + n - 1;//j指针指向数组中的最后一个元素
while (i < j)//因为数组在内存中是一片连续的空间,所以可以用地址的大小判断
{
t = *i;//进行交换
*i = *j;
*j = t;
i++;//注意i一定要++,原先是指向第一个元素,现在是指向数组中的第二个元素
j--;//j一定要--,原先是指向最后一个元素,现在是指向倒数第二个元素
}
}