将变量分配给指针

时间:2014-06-09 03:18:02

标签: c

编译时,程序似乎崩溃了。但是,编译过程中没有错误。

...
int *x;     
*x = 3;
printf("%d", *x);
...

据我所知,该程序将指针*x声明为整数值,然后将值3赋给指向引用的*x

那为什么程序会崩溃?如果我这样做,程序可以正常工作。

...
int *x, y; 
y = 3;
x = &y;    
printf("%d", *x);
...

那么,跳过y变量似乎是什么问题,而是将指针* x直接赋值为整数值?

3 个答案:

答案 0 :(得分:3)

  

据我所知,该程序将指针* x初始化为a   整数值,然后将值3赋值给   引用指针* x。

这是不正确的。 int *x;声明了一个int指针,但它没有将它初始化为任何。此时x指向的内容未知,取决于当前的内存状态。在取消引用指针之前,您需要将其设置为指向某个内容(例如,x = &y;)。

答案 1 :(得分:2)

问题是在第一种情况下,指针'x'没有指向有效的内存位置。并且您正在尝试更改程序不拥有的未分配内存的值 指针在使用前必须始终正确初始化。

答案 2 :(得分:2)

在第一个例子中,x未初始化,因此没有指向有效的内存。

您可以将代码更改为

int *x = malloc(sizeof(int));     
*x = 3;
printf("%d", *x);

它会起作用。

在你的第二个例子中

int *x, y; 

您将x指定为指针,y指定为普通的int变量,而不是另一个指针。如果你想要2个指针,那么语法就是。

int *x, *y;

这可能令人困惑,也是一些C程序员从不在一行上声明多个变量的部分原因。

x = &y;  

在这里,您将y的地址分配给x,从而使x指向有效内存,通过解除引用指针的后续分配将起作用。

你会发现,如果你打印了y的值,那么当你通过x改变它时它也会是3。