[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

 


戳戳小手帮忙点个免费的赞和关注吧,嘿嘿。
目录
相关文章
|
24天前
|
存储 安全 编译器
在 C++中,引用和指针的区别
在C++中,引用和指针都是用于间接访问对象的工具,但它们有显著区别。引用是对象的别名,必须在定义时初始化且不可重新绑定;指针是一个变量,可以指向不同对象,也可为空。引用更安全,指针更灵活。
|
1月前
|
C语言 C++
C 语言的关键字 static 和 C++ 的关键字 static 有什么区别
在C语言中,`static`关键字主要用于变量声明,使得该变量的作用域被限制在其被声明的函数内部,且在整个程序运行期间保留其值。而在C++中,除了继承了C的特性外,`static`还可以用于类成员,使该成员被所有类实例共享,同时在类外进行初始化。这使得C++中的`static`具有更广泛的应用场景,不仅限于控制变量的作用域和生存期。
53 10
|
1月前
|
C语言 C++
实现两个变量值的互换[C语言和C++的区别]
实现两个变量值的互换[C语言和C++的区别]
19 0
|
3月前
|
存储 编译器 C语言
C++内存管理(区别C语言)深度对比
C++内存管理(区别C语言)深度对比
82 5
|
4月前
|
Web App开发 Rust 分布式计算
Rust与C++的区别及使用问题之对于大量使用C++实现的产品来说,迁移到Rust的问题如何解决
Rust与C++的区别及使用问题之对于大量使用C++实现的产品来说,迁移到Rust的问题如何解决
|
4月前
|
Rust 安全 编译器
Rust与C++的区别及使用问题之Rust中的bound check对性能产生影响的问题如何解决
Rust与C++的区别及使用问题之Rust中的bound check对性能产生影响的问题如何解决
|
4月前
|
Rust 测试技术 编译器
Rust与C++的区别及使用问题之Rust项目中组织目录结构的问题如何解决
Rust与C++的区别及使用问题之Rust项目中组织目录结构的问题如何解决
|
3月前
|
缓存 C++ Windows
Inno setup 脚本判断 Microsoft Visual C++ Redistributable 不同版本区别
Inno setup 脚本判断 Microsoft Visual C++ Redistributable 不同版本区别
|
4月前
|
Rust 安全 程序员
Rust与C++的区别及使用问题之Rust解决多线程下的共享的问题如何解决
Rust与C++的区别及使用问题之Rust解决多线程下的共享的问题如何解决
|
4月前
|
Rust 编译器 程序员
Rust与C++的区别及使用问题之Rust避免多线程中的lifetime的问题如何解决
Rust与C++的区别及使用问题之Rust避免多线程中的lifetime的问题如何解决