首页 > 解决方案 > 如何在 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 中的地址的东西。

标签: cpointersvariablesglobal-variablesglobal

解决方案


int m_error可用于保存地址,方法是:

m_error = (int)ptr;

但正如其他评论所建议的那样,作为设计师,您需要了解这意味着什么以及为什么它有时会起作用而有时可能不起作用。这完全取决于您的平台运行的地址范围。

如果您不确定mmap()返回的地址范围是什么,那么您需要在程序中提供保护,以便在地址超出int范围时采取适当的措施。

如果我有其他选择,我会将指针的值传递给free_mem()函数以打印地址的值。


推荐阅读