为初始化指针分配值

时间:2014-07-30 17:30:10

标签: c pointers initialization

当我们声明一个指针时,我们通常将它初始化为一个变量(内存映射),然后为它赋值。

#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)处打印该值。什么似乎是问题,解决方案可能是什么?谢谢。

1 个答案:

答案 0 :(得分:1)

 temp=(d+3);
*temp=c;
d + 3指向的位置之后,

3表示int d。这是一个无效的地址,因为你没有在那里分配任何东西。因此,尝试写入*temp会释放对您实施的无限报复。

您应该使用temp=(d+3);解释您要实现的目标?