如何在c语言中定义一个变量在一个绝对地址

Python013

如何在c语言中定义一个变量在一个绝对地址,第1张

C中的“变量”用标识符表示,叫“变量名”;变量名的管理有一套对编程者透明的机制,所以不能将变量定义在一个程序员主观想像的地方。但指针变量例外,因为指针变量的值是地址值,所以可以将一个具体数值强制为同类型指针再赋给指针变量,如int *p=(int *)1234567,这就把1234567这个地址值赋给指针变量p了——但这是很危险的操作,不仅不提倡,通常是禁止的,只是语法上合法。

system("cmd /c 绝对路径")

比如你要访问c:\dos\tc\123.bat

就是system("cmd /c c:\\dos\\tc\\123.bat")

windows下文件路径是用\分隔的,比如C:\Windows\System32\就是一个标准的windows路径。

在C语言中,文件路径会被写作字符串形式,但是由于C语言的字符串规则中,\字符是转义字符的引导,所以直接写

"C:\Windows\System32\"

会出错。而字符'\\'才是表示\。

于是在写路径的时候,就必须是

"C:\\Windows\\System32\\"

即,写成单独的\的,是windows的标准形式,而写成\\的,才是C语言中用到的形式。

您说的应该是对的,用VC的话前面那条语句是编译不通过的。

补充啊,谈点个人看法:

虽然在VC上面编译不能通过(unsigned int *)0x100000 = 0x3322语句,但是个人认为这条语句与*((unsigned int *)0x100000) = 0x3322所表达的含义是不同的。前者是对指针赋值,后者是对指针所指向的对象赋值。

1. 从变量的定义出发,变量是地址空间的别名,也即例如unsigned int *a表示给一个存储空间命名为a同时这个空间是一个地址指针,假设这个存储空间的地址为0x100000,那么此时a即是地址0x100000单元的别名,对a赋值即是对0x100000所标识的空间赋值。因此(unsigned int *)0x100000 = 0x3322赋值的空间是0x100000。

2. 对于*((unsigned int *)0x100000) = 0x3322语句,也即相当于*a = 0x3322,也即是a所指向的空间被赋值。也即是先取出0x100000地址空间的值作为地址找到对应的存储空间然后存储0x3322。

个人的一点浅见,不知道是否符合真实情况。