首页 > 其他分享 >cpp和c中struct用法的区别

cpp和c中struct用法的区别

时间:2022-09-04 17:24:52浏览次数:91  
标签:typedef struct int age 用法 student printf cpp

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彻底明白了

标签:typedef,struct,int,age,用法,student,printf,cpp
From: https://www.cnblogs.com/ticlab/p/16655457.html

相关文章

  • call、apply、bind三者的用法和区别
    call、apply、bind三者的用法和区别call非严格模式如果不传参数,或者第一个参数是null或nudefined,this都指向window严格模式第一个参数是谁,this就指向谁,包括null和unde......
  • Java中Iterator和ListIterator用法整理
    1 迭代器简介(Iterator)迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建......
  • 简单介绍 js array.map、array.forEach、Object.assign、Object.keys用法
     1、 Object.assign,合并成新的对象formData.data=Object.assign({},toRaw(props.rowData)); 2、Object.keys,循环对象的key属性 Object.keys(enumObj).forEa......
  • group_concat用法详解
    group_concat函数常用于select语句中,下面我们通过一张表来讲解group_concat函数的用法。首先来看下初始的select函数:select*fromexam;上述sql执行结果为:|id|s......
  • numpy数组扩展函数repeat和tile用法
    numpy数组扩展函数repeat和tile用法【Python学习】Numpy函数repeat和tile用法 ......
  • @Transactional注解详细用法
    概述事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性。SpringFramework对事务管理提供了一致的抽象,其特点如下:为不同的事务API提供一......
  • SQL经典用法之用户连续访问区间记录
    案例:有一张DWS表记录了每个用户近30天活跃情况,需要通过该表记录得出用户近30天的连续访问间隔分布情况逻辑梳理:1,要通过埋点日志数据,筛选出最近30天的日志记录,然后按照用......
  • Linux top命令的用法详细详解
    Linuxtop命令的用法详细详解_xiaoL_clo的博客-CSDN博客_linuxtop命令的用法详细详解 https://blog.csdn.net/dxl342/article/details/53507673查看多核CPU命令mpstat......
  • Python爬虫-Pyquery的用法(四)
    一、PyQuery介绍与安装1、PyQuery简介PyQuery简介PyQuery库也是一个非常强大又灵活的网页解析库,如果你有前端开发经验的,都应该接触过jQuery,那么PyQuery就是你非常绝......
  • [ Linux ] column 简明用法
    https://www.cnblogs.com/yeungchie/选项-c指定每一行输出的宽度。-t判断列来输出,对齐所有列。主要用到的就是这个选项。-s指定分隔符,默认为空白符。-o指定用于......