abacoo 发表于 2020-12-11 14:22

这个题中把*p=*(p-1);换成p=p-1为什么不能实现数组中数值的变化呢?

本帖最后由 abacoo 于 2020-12-11 19:52 编辑

长度为10的一维整型数组a中依次存储0、1、2、3、4、5、6、7、8、9,现根据需要将这些数字轮转存放,轮转的次数n通过键盘读入。
int main( )

{

       int a={0,1,2,3,4,5,6,7,8,9};

       int i,n,temp,*p;

       printf("输入轮转的次数:");

       scanf("%d", &n);               

       for(i=1;i<=n;i++)

       {

            temp=*(a+9);

            for(p=a+9; p>a; p--)
            *p=*(p-1);         
         *a=temp;

       }

   for(i=0;i<10;i++)

         printf("%3d", *(a+i));

   printf("\n");

   return 0;

}

doctrinist 发表于 2020-12-11 14:45

*p是数据的地址,是数据的指向变了,变为*(p+1) 地址的数据

云在天 发表于 2020-12-11 14:50

单纯改指针地址有啥用

happyqq521 发表于 2020-12-11 15:06

首先p是指针,   数组a的数组名a也表示第一个元素的地址,a+9表示a的地址,即最后一个元素的地址,先用temp保存a的值,然后循环令a=a,a=a,最后又令a=temp。
p-1是地址,*(p-1)是取p前一个元素的内容。*p=10000才是修改指针p对应的元素的值为10000。

abacoo 发表于 2020-12-11 19:41

p=p-1能实现把p-1的地址传给p吗?

dwxll 发表于 2020-12-17 23:27

abacoo 发表于 2020-12-11 19:41
p=p-1能实现把p-1的地址传给p吗?

p是指针,储存的是对应变量的地址
而*p的指的就是对应变量

int a=5;假设a的地址为0001
int *p=a;执行这个后p的值为0001
*p=6;执行这个后,a的值改为6
p=p-1;//执行这个后p指向的为0000,这个地址对应的可能就不是a这个变量了了
页: [1]
查看完整版本: 这个题中把*p=*(p-1);换成p=p-1为什么不能实现数组中数值的变化呢?