我试图通过另一个变量手动给出地址,而不是使用&
。
#include <stdio.h>
int main()
{
int ab = 99;
int *p;
int f = &ab;
p = f;
printf("%d\n%d\n%d\n%d\n", &ab, p, f, p); // prints same address
printf("%d\n", *p); // By adding this line, gives SEGFAULT
}
./a.out
给出:
284008584
284008584
284008584
284008584
Segmentation fault (core dumped)
最佳答案
您正在尝试将指针值分配给 int
。如果系统上的指针大于 int
(如果您在 64 位操作系统上运行,则很可能是这种情况),那么您最终会在转换中丢失数据。当您随后转换回来时,您最终会得到一个无效的指针,并且尝试取消引用该指针会导致崩溃。
您还通过使用错误的格式说明符来打印指针来调用未定义的行为。您应该使用 %p
,并且应该将指针强制转换为 void *
(强制转换为 void *
时的少数情况之一)是必须的)。如果这样做,转换中的数据丢失将会变得很明显。
关于我们可以通过另一个包含我们希望指针指向的其他变量的地址的变量将地址分配给指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57616456/