首页 > 编程知识 正文

CC 结构体定义及使用,怎么定义结构体及使用

时间:2023-05-06 05:13:53 阅读:259508 作者:4331

  最近在使用结构体时,碰到了各种各样的用法,搞得我很乱,因此就好好查了下资料,又看了看书上是怎么写的,然后在这里做个总结,记录一下。
  参考网址如下:

// 这个讲的特别详细,主要是C++的用法,也提到了与C的不同。https://www.cnblogs.com/wanshuai/p/9088683.html#top//这个列举的例子比较多,参考起来很棒。https://blog.csdn.net/zydxmf_time2012/article/details/80867852 1 结构声明

  结构声明描述了一个结构的组织布局。举例如下:

struct tempA{char cvariableA;// char 类型的变量 cvariableAint ivariableB;// int 类型的变量 ivariableBfloat fvariableC;// float 类型的变量 fvariableCchar carrayA;// char 类型的数组 carrayA};

  下边依次对此结构进行解析:

struct
struct是一个关键字,表明跟在其后的是一个结构;tempA
tempA是一个可选的标记,但是在上述例子中,不能去掉,否则该结构没有作用的“对象”,不过可写成如下样式: struct{char cvariableA;// char 类型的变量 cvariableAint ivariableB;// int 类型的变量 ivariableBfloat fvariableC;// float 类型的变量 fvariableCchar carrayA;// char 类型的数组 carrayA}tempB;

  tempA这个标记,写与不写,主要有以下区别:

写了此标记,则可以在后续程序中使用此标记来引用该结构; struct tempA book;// C 写法// C++允许在声明结构变量时,省略关键字structtempA book;// C++ 写法 如果不写此标记,则只引用该结构定义了一个变量,也就是一次性的,如果需要定义另外一个拥有相同元素的结构体变量,必须要全部重新再写一遍,不能直接引用tempB。 2 定义结构变量

  结构有两层含义,一层是“结构布局”,就是上边的结构声明。结构布局告诉编译器如何表示数据,但是它并未让编译器为数据分配空间(待确认,看参考的经验,利用sizeof还是有空间的)。
  下一步是创建一个结构变量, 即是结构的另外一层含义,前边也有提到过,程序中实现如下:

struct tempA book;// C 写法tempA book;// C++ 写法

  但是如果打算多次使用此结构,就要使用带标记的形式,也就是必须要写tempA;或使用typedef,下边将讲一下typedef的用法。

3 typedef定义结构体

  个人建议使用 typedef 时,把标记也写上,这样在C中,可以使用typedef定义的类型(tempB),在C++中可以直接使用标记(tempA)。两个名字应该是不能一样的。

typedef struct tempA{char cvariableA;// char 类型的变量 cvariableAint ivariableB;// int 类型的变量 ivariableBfloat fvariableC;// float 类型的变量 fvariableCchar carrayA;// char 类型的数组 carrayA}tempB;

  使用 typedef 的好处有如下两点:

为经常出现的类型创建一个方便,易识别的类型名。typedef 常用于给复杂的类型命名。 4 常见的定义结构体方法举例 1 未用typedef 先声明结构体类型,再定义结构变量 struct tempA{char cvariableA;// char 类型的变量 cvariableAint ivariableB;// int 类型的变量 ivariableBfloat fvariableC;// float 类型的变量 fvariableCchar carrayA;// char 类型的数组 carrayA};struct tempA book;// C 写法tempA book;// C++ 写法 在声明的类型的同时,定义结构变量 struct tempA{char cvariableA;// char 类型的变量 cvariableAint ivariableB;// int 类型的变量 ivariableBfloat fvariableC;// float 类型的变量 fvariableCchar carrayA;// char 类型的数组 carrayA}book; 直接定义结构体类型变量(没有标记) struct{char cvariableA;// char 类型的变量 cvariableAint ivariableB;// int 类型的变量 ivariableBfloat fvariableC;// float 类型的变量 fvariableCchar carrayA;// char 类型的数组 carrayA}book; 2 使用typedef 直接定义结构体变量,没有标记,但是可以使用此变量引用该结构体 typedef struct{char cvariableA;// char 类型的变量 cvariableAint ivariableB;// int 类型的变量 ivariableBfloat fvariableC;// float 类型的变量 fvariableCchar carrayA;// char 类型的数组 carrayA}tempB;tempB book;// C C++ 均可 推荐使用的方法,即定义标记,有定义结构体变量 typedef struct tempA{char cvariableA;// char 类型的变量 cvariableAint ivariableB;// int 类型的变量 ivariableBfloat fvariableC;// float 类型的变量 fvariableCchar carrayA;// char 类型的数组 carrayA}tempB;

  此时如果使用C,则可以使用tempB;如果使用C++,则可以使用tempA或tempB。

5 总结

  除了上边讲的,还有其他一些结构体初始化,结构体里边定义结构体等等,都可以参考文章开头的网址,里边讲的比较详细。这里只对我目前用到的做一个总结
  写此篇博客,就是我的一些想法和理解,以后我也会按照文中推荐的标准来使用(用typedef,标记和结构变量都要),这样兼容性比较好,也使自己的代码有一定风格,也比较统一。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。