在此程序中为什么*(s+n-1)=save;不能改写成*(p+n-1)=save; ?谁帮我详细解释一下(该程序目的是向左移3位)

[复制链接]
查看11 | 回复1 | 2010-7-16 21:30:07 | 显示全部楼层 |阅读模式
#include "stdio.h"
void fun(int *s,int n,int move)//这边的*s 也可以用s[]代替;
{ int *p;//这里定义一个指针P
int i,j,save;
for(i=0;i<move;i++)
{p=s; //在这里加上这两句,每次都是从数组开始进行左移
save=*p; //
for(j=0;j<n-1;j++)
{

*p=*(p+1);

p++;
}
*(s+n-1)=save;//为什么这边就不能写成 *(p+n-1)=save;
}
}
main()
{
int a[8]={1,2,3,4,5,6,7,8},i;
fun(a,8,3);
for(i=0;i<8;i++)
{
printf("%d\n",a);
}
}

回复

使用道具 举报

千问 | 2010-7-16 21:30:07 | 显示全部楼层
关于p指针的for循环执行结束后,p指针已经指向了*(s+n-1),所以 *(s+n-1)=save; 也可以是:*p=save;而不能是*(p+n-1)=save;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行