首页 > 解决方案 > 将地址直接设置为C中的指针

问题描述

有一个要求,我必须在运行时更新指针,所以编写了类似检查的代码。

int main()
{
    printf("Hello World");
     int *ptr = NULL;
     int var = 10;
     ptr = &var;
     printf ("\nvalue is %d\t", ptr);
     printf ("\nvalue is %d\t", &var);
     printf ("\nvalue is %d\t", *ptr);
     int add = &var;
     ptr = (int*)add;
     printf ("\nvalue is %d\t", ptr); //printing address of var, which is expected
     printf ("\nvalue is %d\t", *ptr); //segmentation fault in this line
     printf ("\nvalue is %d\t", add);

    return 0;
}

如果我打印指针,则 var 的地址正确存在。但是为什么 *ptr 给出 seg 错误?它不应该是var = 10的值吗?

标签: cpointers

解决方案


这里:

int add = &var;

应该:

int* add = &var;

否则,当您尝试将地址分配给 a 时,该地址会被截断int,这很可能小于指针。你的编译器应该给你各种类型不匹配/间接级别的警告。

另请注意,打印指针的正确格式说明符是%p,不是%d


推荐阅读