c - 如何在 C 语言中对全局变量进行类型转换
问题描述
我在头文件 mem.h 中有一个全局变量:
extern int m_error;
我在 mem.c 文件中将其声明为:
#include "mem.h"
int m_error;
void *init_mem(int size){
void *ptr = mmap(/*arguments*/); //returns address and stores it in ptr
//here I want m_error to store address stored in ptr
}
void free_mem(){
printf("free memory: "); //I want it to print address returned by mmap() in init_mem function through m_error variable.
}
我只能使用一个全局变量,即 m_error。因此,我的方法是将 m_error 类型转换为可以让它存储存储在 ptr 中的地址的东西。
解决方案
int m_error可用于保存地址,方法是:
m_error = (int)ptr;
但正如其他评论所建议的那样,作为设计师,您需要了解这意味着什么以及为什么它有时会起作用而有时可能不起作用。这完全取决于您的平台运行的地址范围。
如果您不确定mmap()返回的地址范围是什么,那么您需要在程序中提供保护,以便在地址超出int范围时采取适当的措施。
如果我有其他选择,我会将指针的值传递给free_mem()函数以打印地址的值。
推荐阅读
- python - 如何将json文件中的相应ID添加到数据框?
- python - 具有分层列的 Pandas 数据透视表
- angular - 使用角度 6 中的 data-toggle ="tab" 导航时出现错误无法匹配任何路线
- python - jinja 中的 jinja2.exceptions.TemplateSyntaxError (即使我在代码中写了 {% endfor %},for 循环也没有结束)
- antlr - 有什么方法可以删除语法规则中不需要的空格?
- java - 找不到 application.xml 中定义的子模块 [xxx.jar]
- c# - EntityHistory 引用其他实体的自有类型失败
- docker - 无法从终端登录到 docker hub
- r - 模式排序及其用 R 表示
- angularjs - Angular 6 - 尝试读取八位字节流内容时的 HttpClient.get 401 错误响应