cpp和c中struct用法的区别
Published on 2022-09-04 17:06 in 分类: C-CPP with dutrmp19
分类: C-CPP

cpp和c中struct用法的区别

cpp和c中struct用法的区别

c中的struct

不使用typedef

C语言中,定义struct的语法如下:

struct [<tag>] {
<member-list>
<member-list>
<member-list>
...
} [<variable-list>];

也可以不给这种struct起名字,只是定义变量,比如下面这样:

#include<stdio.h>
struct {
int age;
} a;
int main() {
a.age = 1;
printf("a.age is %d", a.age);
return 0;
}

也可以先起好名字,然后再通过 struct <tag> <variable-list>;声明变量。

#include<stdio.h>
struct student {
int age;
};
int main() {
struct student a;
a.age = 1;
printf("a.age is %d", a.age);
return 0;
}

注意,这个时候,就一定要加上 struct student a;,而不能 student a;不能少打一个 struct

如果要少打的话,只能通过 typedef struct <tag> <type>自己指定。

#include<stdio.h>
struct student {
int age;
};
typedef struct student Student;
int main() {
Student a;
a.age = 1;
printf("a.age is %d", a.age);
return 0;
}

更绝的是,typedef struct <tag> <type>里,<type><tag>可以同名。

比如定义了一个student的tag,可以通过 typedef struct student student;,这样也是合法的。

#include<stdio.h>
struct student{
int age;
};
typedef struct student student;
int main() {
student a;
struct student b;
a.age = 1;
b.age = 2;
printf("a.age is %d\n", a.age);
printf("b.age is %d\n", b.age);
return 0;
}

使用typedef

typedef如果遇上了 struct {balabala},那就和定义变量没有任何关系了,就是纯粹的换名字。

typedef struct [<tag>] {
<member-list>
...
<member-list>
} <type>;

用了typedef后,既可以通过 struct <tag> <var>;的方式声明变量,也可以通过 <type> <var>;的方式声明变量。

#include<stdio.h>
typedef struct student{
int age;
} Student;
int main() {
Student a;
struct student b;
a.age = 1;
b.age = 2;
printf("a.age is %d\n", a.age);
printf("b.age is %d\n", b.age);
return 0;
}

这样的设计,真是让人吐槽。好的语言应该只有一种写法。

cpp中的struct

cpp里,当使用如下的语法来定义一个 struct tag

struct [<tag>] {
<member-list>
<member-list>
<member-list>
...
} [<variable-list>];

既可以像c语言那样通过 struct <tag> <var>;来声明一个变量,

也可以不用写 struct,而是通过 <tag> <var>来声明一个变量。

#include <iostream>
using namespace std;
struct student {
int age;
};
int main() {
student m;
struct student n;
m.age = 1;
n.age = 2;
cout << "m.age is " << m.age << endl;
cout << "n.age is " << n.age << endl;
return 0;
}

参考

C 结构体

struct和typedef struct彻底明白了

如果您有任何关于文章的建议,欢迎评论或在 GitHub 提 PR

作者:dutrmp19
本文为作者原创,转载请在 文章开头 注明出处:https://www.cnblogs.com/dutrmp19/p/16655457.html
遵循 CC 4.0 BY-SA 版权协议


posted @   dutrmp19  阅读(103)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
历史上的今天:
2021-09-04 Windows安装RubyOnRails
点击右上角即可分享
微信分享提示