我们可以通过另一个包含我们希望指针指向的其他变量的地址的变量将地址分配给指针吗?

标签 c pointers memory-address

我试图通过另一个变量手动给出地址,而不是使用&

#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/

相关文章:

c++ - 我可以在引用返回类型中返回一个指针吗?

python - 用python执行汇编代码

java - java 的内存值

c - 当循环跳过用户输入时,我做错了什么?

c - 作为预处理器变量的精度说明符

c - 指向动态二维字符数组的三重指针的内存分配

c++ - 正确使用智能指针

c - 返回 C 中静态常量变量的地址

C++ 打开文件只在不存在时写入

c++ - 在 C 中迭代 C++ 容器