当我们声明一个指针时,我们通常将它初始化为一个变量(内存映射),然后为它赋值。
#include <stdio.h>
int i=0;
int cir_shift(int *x,int *y);
int main()
{
int a,b,c,*temp,*d;
d=&c;
scanf("%d %d %d",&a,&b,&c);
temp=(d+3);
*temp=c;
cir_shift(d,temp);
printf("%d %d %d",a,b,c);
}
int cir_shift(int *x,int *y)
{
*x=*(x+1);
i++;
if(i==3)
{
return 0;
}
else
{
x++;
cir_shift(x,y);
}
}
这里,当我想打印temp(* temp)的值时,它会一直崩溃。我确实将'temp'初始化为内存地址,但它仍然崩溃了。并且,当我想打印存储在temp的内存地址时,它会在temp(* temp)处打印该值。什么似乎是问题,解决方案可能是什么?谢谢。
答案 0 :(得分:1)
temp=(d+3);
*temp=c;
在d + 3
指向的位置之后, 3
表示int
d
。这是一个无效的地址,因为你没有在那里分配任何东西。因此,尝试写入*temp
会释放对您实施的无限报复。
您应该使用temp=(d+3);
解释您要实现的目标?