c - 将地址直接设置为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的值吗?
解决方案
这里:
int add = &var;
应该:
int* add = &var;
否则,当您尝试将地址分配给 a 时,该地址会被截断int
,这很可能小于指针。你的编译器应该给你各种类型不匹配/间接级别的警告。
另请注意,打印指针的正确格式说明符是%p
,不是%d
。
推荐阅读
- integer - 使用有符号整数时,我的值是否总是从零开始?
- ruby - 如何在 Ruby 中将图像从帖子附加到电子邮件
- excel - 工作表数组的数据类型
- c# - 我在使用波浪生成器时遇到问题
- spring-boot - 为什么在 Spring Boot 中向安全资源提交请求时出现 cors 错误?
- asp.net-web-api - 响应正文未从 swagger Swashbuckle 中的自定义错误响应中返回
- reactjs - 单击单个按钮时显示多个 Popconfirm 按钮
- android - 如果被选中的一行的复选框调用 notifyDataSetChanged() 会导致循环
- shell - 替换`里面的字符串
替换任何字符串 ` 用于 solaris 10 UNIX 命令 - excel - Export certain range as pdf based on userform checkbox