[C++&C] Struct 和Typedef Struct的区别

简介: [C++&C] Struct 和Typedef Struct的区别

1.首先介绍一下C语言的用法,在C中定义一个结构体类型要用typedef:

//定义一个结构体类型
//定义一个数据类型,固定大小内存块的别名,还没有分配内存
struct Teacher
{
  int age;
};
void main()
{
  struct Teacher Zhang;  //告诉C编译器给我分配内存
}

注意:上面使用struct Teacher Zhang; 定义类型变量的时候不能省略struct (C++可以),可以采用下面重定义的方式省略struct

//定义一个结构体类型
//定义一个数据类型,固定大小内存块的别名,还没有分配内存
//重定义
typedef struct Teacher
{
  int age;
}Tea;  //这里面相当于为struct Teacher去了一个新的名字Tea
void main()
{
  Tea Zhang;  //如果没有typedef就必须用struct Teacher Zhang来声明)
}

可以看出在C中,若不使用typedef需要struct Teacher Zhang; 来声明变量。上面的Tea是struct Teacher的别名,Tea==struct Teacher。在声明变量的时候就可:Tea Zhang

2.而在C++用法中比较简单,可以直接

struct Teacher
{
  int age;
};

于是就定义了结构体类型Teacher,声明变量时直接Teacher Zhang

如果在c++中用typedef的话,又会造成区别

无typedef:

struct Teacher
{   
  int age;
}Tea1;  //Tea1是一个变量  
void main()
{
  Tea1.age = 30;  //为结构成员赋值
}

有typedef:

typedef struct Teacher
{   
  int age;
}Tea2;  //Tea2是一个结构体类型 = struct Teacher
void main()
{
  Tea2 Zhang    //先声明结构类型变量
  Zhang.age = 40;   //访问结构成员并赋值
}

无typedef时,使用过程中可以直接访问结构成员并赋值Tea1.age = 30;

而有typedef时,则必须先声明一个结构类型变量变量Tea2 Zhang,然后给结构成员赋值Zhang.age = 40;

总结:C++中无typedef时,在末尾定义的是变量,可以直接使用它对结构中的成员变量进行赋值;而有typedef 时,在末尾定义的是结构类型,相当于为struct定义的结构类型换了一个新的名字,使用时,需要先定义变量,然后对结构中的成员变量进行赋值。

   

   

参考:https://blog.csdn.net/we1meng/article/details/70208708

 


戳戳小手帮忙点个免费的赞和关注吧,嘿嘿。
目录
相关文章
|
1月前
|
存储 安全 C++
C++中的引用和指针:区别与应用
引用和指针在C++中都有其独特的优势和应用场景。引用更适合简洁、安全的代码,而指针提供了更大的灵活性和动态内存管理的能力。在实际编程中,根据需求选择适当的类型,能够编写出高效、可维护的代码。理解并正确使用这两种类型,是掌握C++编程的关键一步。
26 1
|
15天前
|
算法 Java C++
C++和Python在内存管理上的主要区别是什么?
【7月更文挑战第2天】C++和Python在内存管理上的主要区别是什么?
15 1
|
15天前
|
算法 Java C++
C++和Python在内存分配策略上的主要区别是什么?
【7月更文挑战第2天】C++和Python在内存分配策略上的主要区别是什么?
13 0
|
15天前
|
机器学习/深度学习 Java 程序员
Python和C++的区别?
【7月更文挑战第2天】Python和C++的区别?
9 0
|
1月前
|
编译器 C语言 C++
C++中.h和.hpp文件有什么区别?
C++中.h和.hpp文件有什么区别?
|
1月前
|
Java C++
Java和C++的一些区别
Java和C++的一些区别
|
1月前
|
C++
【C++系列】指针对象和对象指针的区别
这段内容介绍了C++中`ListNode`对象和指针的两种使用方式以及它们的区别。首先,`ListNode dummy(0); ListNode* cur = &dummy;创建了一个`ListNode`对象`dummy`在栈上,`cur`是`dummy`的地址。而`ListNode* dummy = new ListNode(0); ListNode* cur = dummy;`则在堆上分配了一个`ListNode`,`dummy`和`cur`都是指向该对象的指针。使用`&dummy`作为虚拟头节点简化链表操作,避免特殊处理。栈分配内存自动管理但生命周期受限,堆分配内存需手动释放且速度较慢。
|
2月前
|
存储 编译器 程序员
C++中的宏定义和字符串字面值的区别
C++中的宏定义和字符串字面值的区别
|
2月前
|
C++
【C++基础】结构struct
【C++基础】结构struct
10 0
|
2月前
|
编译器 C语言 C++
【C++专栏】C++入门 | 类和对象 | 类的引入、struct&class的区别、类的定义
【C++专栏】C++入门 | 类和对象 | 类的引入、struct&class的区别、类的定义
18 0