繁体   English   中英

将变量分配给指针

[英]Assigning variables to pointers

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

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

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

那么,为什么程序崩溃? 如果我改为这样做,则程序可以正常运行。

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

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

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

那是不对的。 int *x; 声明一个int指针,但不会将其初始化为any x指向的是未知的,并且取决于当前的内存状态。 在取消引用指针之前,需要将其设置为指向某个对象(例如x = &y; )。

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

在第一个示例中,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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM