这个题中把*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;
} *p是数据的地址,是数据的指向变了,变为*(p+1) 地址的数据 单纯改指针地址有啥用 首先p是指针, 数组a的数组名a也表示第一个元素的地址,a+9表示a的地址,即最后一个元素的地址,先用temp保存a的值,然后循环令a=a,a=a,最后又令a=temp。
p-1是地址,*(p-1)是取p前一个元素的内容。*p=10000才是修改指针p对应的元素的值为10000。 p=p-1能实现把p-1的地址传给p吗? 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]