指针程序C

来源:百度知道 编辑:UC知道 时间:2024/09/23 19:06:33
#include "stdio.h"
main()
{
int x[15],*p,n,i,*e,k;

scanf("%d",&n);
p=x;
for(i=0;i<n;i++)
scanf("%d",p++);
for(i=1,p=x,e=x+n-1;i<n/2;i++,p++,e--)//这句话没弄懂?
k=*p,*p=*e,*e=k;
for(p=x;p<x+n;p++)
printf("%d",*p);

您好 像这样的复杂for循环 要先找分号,

for(i=1,p=x,e=x+n-1;i<n/2;i++,p++,e--)

从分号的划分可以看出,i=1,p=x,e=x+n-1这是循环变量初始部分,
i=1 让p指针指向x[15]数组的首位置(第一个数),

让e指针指向x后n位的前一位,也就是指向x数组的末尾一个数

然后循环n/2-1次,
每次执行后让i自加,头指针p后移1位 尾e前移1位,并把指向的内容交换

从而实现利用指针将数组倒置

楼主这个程序谁教的?
顺环内赋值时候C的灵活性,可是这样也太增加程序的难读性了,不好!
还有你在scanf的时候也不忘++一下,这样不是所有的编译器都能得出正确结果的,乖乖的多些一行代码先++再scanf吧,影响可读性!

这句话的意思是三部分for(1;2;3)
1:i=1,p=x,e=x+n-1
2:i<n/2
3:i++,p++,e--

这下好懂了

#include "stdio.h"
main()
{
int x[15],*p,n,i,*e,k;

scanf("%d",&n);
p=x;
for(i=0;i<n;i++)
scanf("%d",p++); //这里是使用指针给数组x里的元素赋值
for(i=1,p=x,e=x+n-1;i<n/2;i++,p++,e--)//这句话没弄懂?
p=x,是因为上面赋值的时候使用指针自增,p++指针所指的内存地址已经向后面移动了,再次使用必须再把指针指向数组首地址,
e=x+n-1,是把数组后面的地址,就是输入x-1个元素的首地址给指针e
后面的就是循环赋值的了,很好理解了