我有一行我无法理解的代码。我是C编程的新手,我正在浏览一些我必须筛选的代码。
有人可以向我解释以下代码:
short int *aux_status_register = ((short int *)(0x00001234));
令我困惑的是“=
”之后的代码。为什么整数声明中的括号中的“*
”与它附加到地址(或者我认为是指针指向的地址)相反?如果代码行是(short int *0x00001234)
?
从我的这一行开始,aux_status_register
是一个指向十六进制整数的指针:0x1234。存储在aux_status_register
中的内容存储在0x1234地址位置?
请帮忙。对此,我真的非常感激... 感谢。
答案 0 :(得分:1)
括号中的部分(short int *)
是一个类型转换。这意味着数字文字(0x00001234)
将被视为指向地址处的短整数的指针。如果括号*
中未包含0x00001234
,则只会转换为short int
。
答案 1 :(得分:1)
(short int *)
是类型转换,这意味着它后面的元素将转换为short int
类型指针。因此,总结此语句的作用是将地址(0x00001234)
分配给指针aux_status_register
,并确定这是short int
类型的地址。
您可以通过打印指针的值来检查:
printf("%p",aux_status_register);
给你:
0x1234
答案 2 :(得分:0)
括号中的类型名称是类型转换。 变量的类型(在等号的左侧)是“短整数指针”,因此强制转换必须匹配:“(short int *)”。
我不认为在这种情况下演员是绝对必要的,我很确定
short int *aux_status_register = 0x00001234;
也没关系。
答案 3 :(得分:0)
<强>&GT; short int * aux_status_register =((short int *)(0x00001234));
aux_status_register是指向short int的指针。数字0x1234被强制转换为指向short int的指针。因此,指针aux_status_register现在将地址保存在内存0x1234中,该地址可能包含辅助状态。
这似乎是一个坏主意,因为它是一个32位地址,所以在64位机器上,你丢失了一半的地址。但是,现代编译器就像它们一样,你可能真的把0x0000000000001234放进了aux_status_register。
要访问寄存器(为了检查辅助状态),您可以使用* aux_status_register来告诉您存储在内存位置0x1234的值。