编一个程序,输入15个整数存入一维数组,按逆序存放后再输出(用指针完成)。 朋友帮我解释这个程序的运行

2025-03-15 01:10:28
推荐回答(3个)
回答1:

#include
int main()
{
//定义
int i,a[15],*p=a,*q,temp;

//初始化,输入15个数据
for(i=0;i<15;i++)
scanf("%d",p+i);
//把数组第15个元素的地址赋给q
q=&a[14];
//以第八个元素为对称点,最头部与最尾部交换
for(i=0;i<7;i++)
{
//头部与尾部交换
temp=*p;
*p=*q;
*q=temp;
//头部指针向后移一位,作为新的头部,尾部指针向前移动一位,作为新的尾部
p++;q--;
}

p=a;//由于下面要用p来对数组操作,所以把数组的头地址赋给p

//输出操作
for(i=0;i<15;i++)
printf("%3d",*(p+i));

return 0;
}

回答2:

int i;
int a[15];
int *p=a;
int *q;
int temp;

//输入15个数据
for(i=0; i<15; i++)
scanf("%d",p+i);

q=&a[14]; //最后一个元素的地址赋值给q

for(i=0; i<7; i++)
{
//前面一半与后一半交换
temp=*p;
*p=*q;
*q=temp;

p++; //前面的指针向后移
q--; //后面的指针向前移
}

p=a; //将a的首地址赋值给p
for(i=0; i<15; i++)
printf("%3d",*(p+i));

回答3:

#include
main()
{
int i,a[15],*p=a,*q,temp;
for(i=0;i<15;i++)
scanf("%d",p+i);//数组的输入
q=&a[14];
for(i=0;i<7;i++)
{
temp=*p;*p=*q;
*q=temp;p++;q--;//把a[0]的地址与a[14]的互换a[1]与a[13].......循环
}
p=a;//指针p指向数组的首地址
for(i=0;i<15;i++)
printf("%3d",*(p+i));//输出