我是靠谱客的博主 单薄导师,最近开发中收集的这篇文章主要介绍C语言结构体的深度剖析,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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语言结构体的深度剖析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部