gpt4 book ai didi

c - 取消引用指向任意地址的指针会导致段错误

转载 作者:太空宇宙 更新时间:2023-11-04 00:23:15 25 4
gpt4 key购买 nike

我已经为指针编写了一个简单的 C 代码。根据我的理解,指针是一个变量,它保存另一个变量的地址。例如:

 int x = 25; // address - 1024
int *ptr = &x;
printf("%d", *ptr); // *ptr will give value at address of x i.e, 25 at 1024 address.

然而,当我尝试下面的代码时,我遇到了段错误

#include "stdio.h"
int main()
{
int *ptr = 25;
printf("%d", *ptr);
return 0;
}

这有什么问题吗?为什么指针变量不能返回地址 25 处的值?我不应该能够读取该地址的字节吗?

最佳答案

除非您在具有特定已知内存位置的嵌入式系统上运行,否则您不能将任意值分配给指针并期望能够成功取消引用它。

C standard 的第 6.5.3.2p4 节关于间接运算符 * 的声明如下:

The unary * operator denotes indirection. If the operand points to a function, the result is a function designator; if it points to an object, the result is an lvalue designating the object. If the operand has type "pointer to type", the result has type "type". If an invalid value has been assigned to the pointer, the behavior of the unary * operator is undefined.

如上文所述,C 标准仅允许指针指向已知对象或动态分配的内存(或 NULL),而不是任意内存位置。某些实现可能在特定情况下允许这样做,但在一般情况下不允许。

关于c - 取消引用指向任意地址的指针会导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58187160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com