结构体学习(一)
C语言还没入门,慢慢学,急不得。。。
在《NIOS II的那些事儿》的第一课LED实验中我就遇到了难题。。。
在生成的 system.h 文件中的PIO配置部分有这么一句:
#define PIO_LED_BASE 0x02000000
我们自己写的 sopc.h 文件是这样的:
在主函数 main.c 中我们是这样用的:
首先就要搞清楚 typedef 的作用,typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。
我们平时用结构体是这样用的 struct student{...; ...;};这只是声明了一个结构体的类型 struct student 就像 int ,char 一样,只不过 int, char 是C语言本省规定的,struct student 是我们自己定义的,我们知道 struct 后面的 student 是结构体名也就是结构体标记,在有些场合是可以省略的,比如:如果一个结构体描述在一个程序中只出现一次。。。本来我们可以用 struct student 去定义stu_1, stu_2. 但现在有了 typedef struct (结构体名省略) {...; ...;} PIO_STR; 就相当于跟这个结构体取了个别名,这样可以直接用PIO_STR去定义了,它就相当于 int . 再看2处 (PIO_STR *) PIO_LED_BASE , 这是一个类型转换,它是把一个无类型的地址转换成一个结构体指针。在定义一个宏,命名为LED,它是指向PIO_LED_BASE的结构体指针。