[英]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.