C - 当在函数中声明时,当同一变量工作时,全局变量不起作用



我正在尝试通过使用此功能访问 C 中的视频内存,在没有标准库的情况下将字符*打印到屏幕上:

int printchar(char c) {
        int videohex = 0xb8000;
        char* vidmem = (char*) videohex;
        *vidmem = c;
        videohex = videohex + 2;
}

代码按预期将变量 c 打印到屏幕上,但是当我将 videohex 声明为全局变量时(我将在整个程序中使用此变量(,使用以下代码:

int videohex = 0xb8000;
int printchar(char c) {
        char* vidmem = (char*) videohex;
        *vidmem = c;
        videohex = videohex + 2;
}

什么都没有打印出来。

我做错了什么?

不同之处在于你在函数结束时递增videohex

当它是局部变量时,每次调用函数时,它都会重新初始化为 0xb8000

当它是全局变量时,它会在调用之间保留更新的值。下次调用该函数时,它将写入不同的内存位置。最终,您将将其递增到视频内存的末尾。

您可能应该使用两个变量。一个指向视频内存的底部,另一个指向当前字符的偏移量。您可以增加偏移量,当您到达终点时,它可以回绕到 0 .

不需要

intchar *变量,您可以根据需要简单地初始化指针:

const char *video_base = (char *)0xb8000;
unsigned int video_offset = 0;
#define VIDEO_MAX 0x1000
int printchar (char c) {
    video_base[video_offset] = c;
    video_offset += 2;
    if (video_offset >= VIDEO_MAX) {
        video_offset = 0;
    }
}

相关内容

  • 没有找到相关文章

最新更新