编写程序,以指针的方式,就地逆置一维数组。
输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试数据先输入数据个数n,然后输入n个整数。
输出格式:
对于每组测试,在一行上输出逆置之后的结果。数据之间以一个空格分隔。
输入样例:
输出样例:
/*注:对于指针来说可能更难理解的就是概念,这是最绕的地方很令人
头疼,但是怎么说呢?加油!*/
#include<stdio.h>
void function(int k, int* A);//被调用函数:逆置
int main()
{
int n = 0;//接收多少行
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
int k = 0;//接收每行第一个数,表示这个矩阵有多少个数
int A[100] = { 0 };
scanf("%d", &k);
for (int j = 0; j < k; j++)
{
scanf("%d", &A[j]);
}
function(k, &A[0]);//调用被调用函数,&取A[0]的地址
/*这里要学习的点是形参和实参,我明天会用一组对比代码说明这两者
之间的关系,希望对你有帮助,也希望得你的建议*/
for (int j = 0; j < k - 1; j++)
{
printf("%d ", A[j]);
}
printf("%d", A[k - 1]);
printf("\n");
}
return 0;
}
void function(int k, int* A)
{
for (int i = 0; i < (k / 2); i++)
{
int zhongjianshang = 0;
zhongjianshang = *(A + i);//*去除(A+i)这个地址中的元素
*(A + i) = *(A + k - i - 1);//同上
*(A + k - i - 1) = zhongjianshang;//同上
}
}
/*总结来说这是对地址中的值进行直接更改就不会出现改变形参但实参不改
变的情况*/