概述
1、
(声明结构体类型仅仅是声明了一个类型,系统并不为之分配内存,就如同系统不会为类型 int 分配内存一样。只有当使用这个类型定义了变量时,系统才会为变量分配内存。所以在声明结构体类型的时候,不可以对里面的变量进行初始化。)
typedef struct student
{ int num;
}STUDENT;
typedef struct student STUDENT;
typedef给struct student起了个新名字叫STUDENT。
2、
typedef struct tagNode
{
char *pItem;
pNode pNext;
} *pNode;
上述代码编译阶段会报错,原因:
在上面的代码中,新结构建立的过程中遇到了 pNext 声明,其类型是 pNode。这里要特别注意的是,pNode 表示的是该结构体的新别名。
于是问题出现了,在结构体类型本身还没有建立完成的时候,编译器根本就不认识 pNode,因为这个结构体类型的新别名还不存在,所以自然就会报错。
因此,我们要做一些适当的调整,比如将结构体中的 pNext 声明修改成如下方式:
typedef struct tagNode
{
char *pItem;
Struct pNode pNext;
} *pNode;
等价于如下:
struct tagNode
{
char *pItem;
struct tagNode *pNext;
};
typedef struct tagNode *pNode;
3、结构体对齐需要特别注意。
4、向函数传递结构体(参数传递)
将结构体传递给函数的方式有如下3种:
1.用结构体的单个成员作为函数参数,向函数传递结构体的单个成员(属于传值调用,不会影响相应的实参结构体的值)
2.用结构体变量做函数参数,向函数传递结构体完整结构(属于传值调用,不会影响相应的实参结构体的值)
3.用结构体指针或结构体数组作函数参数属于模拟按引用调用,会影响相应的实参结构体的值,向函数传递结构体地址,因为仅复制结构体首地址一个值给被调函数,相对于第二种方式,这种传递效率更高
补充:按值调用与模拟按引用调用(参数传递)
按值调用:将程序将函数调用语句中的实参的一份副本传给函数的形参
模拟按引用调用:指针作为函数的参数,虽然实际上也是传值给被调用函数,但是传给被调用函数的这个值不是变量的值,而是变量的地址,
最后
以上就是单薄导师为你收集整理的C语言结构体的深度剖析的全部内容,希望文章能够帮你解决C语言结构体的深度剖析所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复