C语言当中结构句后面一个星号,是啥意思?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言当中结构句后面一个星号,是啥意思?相关的知识,希望对你有一定的参考价值。

Cortex=M3使用CMSIS编程的问题

有如下这些定义:
#define SCS_BASE (0xE000E000) /*!< System Control Space Base Address */

#define NVIC_BASE (SCS_BASE + 0x0100) /*!< NVIC Base Address */

typedef struct

__IO uint32_t ISER[8]; /*!< Offset: 0x000 Interrupt Set Enable Register */
uint32_t RESERVED0[24];
__IO uint32_t ICER[8]; /*!< Offset: 0x080 Interrupt Clear Enable Register */
uint32_t RSERVED1[24];
__IO uint32_t ISPR[8]; /*!< Offset: 0x100 Interrupt Set Pending Register */
uint32_t RESERVED2[24];
__IO uint32_t ICPR[8]; /*!< Offset: 0x180 Interrupt Clear Pending Register */
uint32_t RESERVED3[24];
__IO uint32_t IABR[8]; /*!< Offset: 0x200 Interrupt Active bit Register */
uint32_t RESERVED4[56];
__IO uint8_t IP[240]; /*!< Offset: 0x300 Interrupt Priority Register (8Bit wide) */
uint32_t RESERVED5[644];
__O uint32_t STIR; /*!< Offset: 0xE00 Software Trigger Interrupt Register */
NVIC_Type;

#define NVIC ((NVIC_Type *) NVIC_BASE) /*!< NVIC configuration struct */

在使用的时候它就这么用:比方说是要给ISER附值,NVIC->ISER=0x85c0;我主要 是不能理解这句:

#define NVIC ((NVIC_Type *) NVIC_BASE)其中这个(NVIC_Type *) 是什么意思?起什么作用的?还有就是这个ISER的地址是0xe000e100
我们写程序的时候为什么不直接写成:
#define ISER (0xE000E100) 然后来一句:ISER=0x85c0;为什么就要这么费劲?定义了那么多东西?它这么做有什么好处?

参考技术A 星号在这里是指针的意思。指向结构NVIC_Type的指针。这里因为NVIC_BASE本身和CS_BASE一样都是常量,所以这个指针是固定位置的常量指针。
这也能解释为什么后面有NVIC->ISER=0x85c0;这样的用法。

第二个问题:
理论上,你可以按你想的方式去做:
#define ISER (0xE000E100) 然后来一句:ISER=0x85c0;
C并不限制你做这样的事情。但是这里有一个结构。可能这个结构会在后续被用到,所以这样的设计也许是基于这样的考虑。
我不太清楚这段代码是作什么用,没什么上下文,估计是嵌入式平台上的代码,所以我不确定这个回答是不是完全正确。本回答被提问者采纳
参考技术B 表解释这段语句

在c语言中 if(0)是啥意思

if(0)的意思,就是不执行if(0)后面跟着的大括号里面的语句。(这里的大括号若没有,则表示if(0)后面跟着的第一个分号的语句。)

流程控制关键字

跳转结构

return:用在函数体中,返回特定值(如果是void类型,则不返回函数值)。(K&R时期引入)

continue:结束当前循环,开始下一轮循环。(K&R时期引入)

break:跳出当前循环或switch结构。(K&R时期引入)

goto:无条件跳转语句。(K&R时期引入)

分支结构

if:条件语句,后面不需要放分号。(K&R时期引入)

else:条件语句否定分支(与if连用)。(K&R时期引入)

switch:开关语句(多重分支语句)。(K&R时期引入)

case:开关语句中的分支标记,与switch连用。(K&R时期引入)

default:开关语句中的“其他”分支,可选。(K&R时期引入)

扩展资料:

C语言编译器:

GCC,GNU组织开发的开源免费的编译器

MinGW,Windows操作系统下的GCC

Clang,开源的BSD协议的基于LLVM的编译器

Visual C++ :: cl.exe,Microsoft VC++自带的编译器

C语言集成开发环境:

CodeBlocks,开源免费的C/C++ IDE

CodeLite,开源、跨平台的C/C++集成开发环境

Orwell Dev-C++,可移植的C/C++IDE

C-Free

Light Table

Visual Studio系列

Hello World

参考技术A if被称之为条件语句。
if()


当()括号中的式子为真时,则执行大括号里面的语句,当式子为假时,不执行。
c语言规定,任何非0的数像1 -1等都被认为是真,而0被认为是假,所以if(0)的意思,就是不执行大括号里面的语句。(这里的大括号若没有,则表示if()后面跟着的第一个分号的语句。)本回答被提问者采纳
参考技术B 首先你要明白3点:
1,if 语句:该语句的作用是判断括号内的表达式是否成立,成立,则执行if后面的语句,否则不执行
2.% 求余(模)运算符 ,a%b的结果为,a整除b之后得到的余数。例如 9%6 其结果为3,6%9==6
3 != 关系运算符中的不等于,判断 该运算符左右两边的表达式是否相等。
因此,该条语句的意思,是判断y整除4的结果是否不等于0,如果成立,则执行 其后面的语句,反之,则不执行
参考技术C if(0)就是if里面语句不运行。可用于测试。 参考技术D if(0)其实是可以用于一段代码的屏蔽、不处理。

以上是关于C语言当中结构句后面一个星号,是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

C语言结构体在定义的时候,各成员后面加冒号是啥意思?

请问 C语言里的 结构体中定义变量 后面的:是啥意思

在c语言中 if(0)是啥意思

C语言 counter=counter+1 是啥意思,为啥后面要加1,去掉行吗?与while 有什关系?

c语言中,函数定义中的冒号是啥意思?

c语言里面的结构体是啥意思