C语言中的指针语法初学者

时间:2014-02-07 18:24:14

标签: c pointers syntax

我有一行我无法理解的代码。我是C编程的新手,我正在浏览一些我必须筛选的代码。

有人可以向我解释以下代码:

short int *aux_status_register = ((short int *)(0x00001234));

令我困惑的是“=”之后的代码。为什么整数声明中的括号中的“*”与它附加到地址(或者我认为是指针指向的地址)相反?如果代码行是(short int *0x00001234)

,情况会有所不同吗?

从我的这一行开始,aux_status_register是一个指向十六进制整数的指针:0x1234。存储在aux_status_register中的内容存储在0x1234地址位置?

请帮忙。对此,我真的非常感激... 感谢。

4 个答案:

答案 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的值。