【发布时间】:2023-03-26 06:57:01
【问题描述】:
我为指针编写了一个简单的 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 处的值?我不应该能够读取该地址的字节吗?
【问题讨论】:
-
` int *ptr = 25;` 表示
ptr将指向地址25。它与你提到的其他数字有什么关系——我不知道。 -
是的。
ptr指向地址25。为什么打印*ptr会出现段错误。它必须在地址25 -
你第一次做对了:
int x = 25; int *ptr = &x; printf("%d", *ptr);完全没问题。int *ptr = 25; printf("%d", *ptr);是垃圾代码。 -
@Cynacode 你怎么知道地址 25 是有效的并且正确对齐以寻址
int?如果您认为您知道它是有效且正确对齐的,那么系统似乎不同意,因此出现分段错误。 -
@IanAbbott 同意你的看法。但是
printf("%d", ptr);将正确打印值25这是怎么回事?
标签: c pointers undefined-behavior dereference