我只是在试验一些使用 c 的系统级编程。 我遇到了一些模棱两可的事情,我希望这里有人能帮我解决。
如果我创建一个 char*,然后按以下方式将地址提供给一个函数
char* string;
os_IntToString(&string, string);
void os_IntToString(int value, char* str) {
int scancode_offset = 48;
char* start = *str;
do{
int piece = value % 10;
*str++ = piece + scancode_offset;
value = value / 10;
} while(value);
*str-- = '\0';
}
那我到底得到了什么? 我得到的是实数,例如 589796。显然地址是向后的,但它是什么基本系统?
内存地址是十六进制的吧?但是函数使用 Int 是十进制基数 10? 那是对的吗?是否发生了转换过程,或者我现在是否有十进制地址,我只是不知道。
谁能解决这个问题。非常感谢。
最佳答案
就C 语言而言,地址不是“十六进制”的,也不是数字。地址只是地址或指针值。根据您使用的系统的寻址方案,地址可能以十六进制表示(例如,如果使用 printf
的 "%p"打印
格式)。您还可以将地址转换为整数,但转换的结果是实现定义的——而且整数也不是“十六进制”的,尽管您可以生成人类可读的整数的十六进制表示形式。 (整数用二进制表示。)
至于您的函数,您已经用 void
返回类型定义了它,然后试图从它返回一个 char*
值。如果不是 fatal error ,您应该至少得到编译器的警告。
关于C语言: Convert Pointer to String,我要返回什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17324068/