type struct 和struct的区别

掌握Go语言精髓:巧用type与struct打造精致数据结构 本文将探讨如何在Go语言中精准运用type关键字与struct结构体,为程序员提供深入理解与实践指南。我们将详细介绍语法结构、示例代码、运行结果,并深入探讨在不同场景下的应用、优势与劣势,最终分享最佳实践,助您运用这一特性构建高效、清晰的代码。 阅读详情

1、用Typedef 定义类型

除了可以直接使用C提供的标准类型名(如int char float等)和自己声明的结构体等类型外,还可以用typedef声明新的类型名来代替已有的类型名。
习惯上常把typedef声明的类型名用大写字母表示,以便与系统提供的标准类型标识符相区别

1、typedef int INTEGER;
typedef float REAL;
如果一个程序中,一个整形变量用来计数,可以
typedef int COUNT;
COUNT i,j;
2、可以声明结构体类型

typedef struct
{
    int month;
    int day;
    int year;
}DATE;

声明新类型名DATE,它代表上面指定的一个结构体类型。这时,就可以用DATE定义变量:
DATE brithday;
DATE * p;
3、还可以进一步:
1)、typedef int NUM[100];
NUM n;
声明NUM为整形数组类型,定义n为整形数组变量;
2)、typedef char * STRING;
STRING p,s[10];
声明STRING为字符指针类型
3)、typedef int (* POINTER)( )
声明POINTER为指向函数的指针类型,该函数返回整型值;

1】注意#define是在预编译时处理的,它只能作简单的字符串替换,而typedef 是在编译时处理的。实际上它并不是作简单的字符串替换。

2】当不同源文件中用到同一类型数据时,常用typedef声明一些数据类型,把它们单独放在一个文件中,然后在需要用到它们的文件中用#include命令把它们包含进来。

3】使用typedef有利于程序的通用和移植。有时程序会依赖硬件特性,用typedef便于移植。例如,有的计算机系统int型数据用两个字节、数据范围为-32768~32767,而另外一些机器则以4个字节存放一个整数,数值范围为+-21亿。如果把一个C程序从一个以4个字节存放整数的计算机系统移植到以2个字节存放整数的系统,按一般方法需要将定义变量中的每个int改为long。例如,将“int a,b,c;”改为“long a,b,c;”,如果程序中有多处用int 定义变量,则要改动多处。现在用一个INTEGER 来声明int:
typedef int INTEGER;
在程序中所有整型变量都用INTEGER定义。在移植时只需改动typedef定义体即可:
typedef long INTEGER;

2、struct和typedef struct

  普通结构体声明时使用只struct关键字,而链表需要typedef struct,比较疑惑他们之间的区别
  
(1) 在C中定义一个结构体类型要用typedef:

typedef struct Student  
{  
     int a;  
}Stu;  

则声明变量是这种形式:Stu stu1;
如果没有typedef就必须用struct Student stu1;来声明。Stu实际上就是struct Student的别名。
另外这里也可以不写Student

typedef struct  
{  
     int a;  
}Stu;  

则声明形式必须是Stu stu1;
2)在c++中定义一个结构体类型:

struct Student  
{  
     int a;  
}; 

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

typedef struct Student2  
{  
int a;  
}stu1;//stu1是一个结构体类型  
struct Student  
{  
int a;  
}stu2;//stu2是一个变量  

注意带typedef关键字,其就为类型,不带就为变量
还应该注意的是,C++为了C程序员的习惯,保留了Struct关键字,但是其意义与Class相同,唯一的区别是Struct默认成员权限为public。

3) 链表的声明

//方式1
typedef struct ListNode  
{  
 DataType data;  
 struct ListNode *next;  
}Node,*LinkList;  


//方式2
struct ListNode
{
DataType data;  
struct ListNode *next;  
};  
typedef struct ListNode Node;    
typedef Node *Linklist;          

//方式3
 typedef struct ListNode {     
   DataType data;  
   struct ListNode *next;  
}Node;  
typedef Node *LinkList;  

因为都有typedef关键字,所以后面声明的都是类型。其中Node与LinkList本质是一样的,只不过一个是Node类型结构体,一个是指向Node的指针。但是理解时LinkList应该是高层次的意义,即一个链表。

.net 杂谈之二 .net教程 阅读详情

相关推荐

【solidity入门】5. 引用类型 Reference Type

(本文是学习WTF学院后记的笔记) 引用类型 Reference Type: 1. 数组 array:定义、分类、创建规则、数组成员 2. 结构体 struct:定义新类型、赋值的两种方法

weixin_44792616的博客 481

(六)Go------自定义类型type,结构体struct

文章目录结构体什么是结构体?1. 定义结构体2. 绑定方法3. 方法的参数传递方式4. 结构体实现 “继承”5. 内部方法与外部方法6. 三种实例化方法7. 选择器的冷知识 结构体 什么是结构体? 数组与切片,只能存储同一类型的变量。 若要存储多个类型的变量,就需要用到结构体,它是将多个任意类型的变量组合在一起的聚合数据类型。 每个变量都成为该结构体的成员变量。 可以理解为 Go语言 的结构体struct和其他语言的class有相等的地位,但是Go语言放弃大量面向对象的特性,所有的Go语言类型除了指针类型外

weixin_45697293的博客 5445

PTA-浙大版 《Python程序设计》 第三章编程题目及答案

博主第一次写优快云的博客,所以排版上可能有些不尽人意,代码部分均为自己的思路,可能复杂或者考虑欠妥,欢迎大家一起讨论~ 第一题:大于身高的平均值 这里用了np数组求得平均数,当然for循环累加也是可以的 import numpy as np data = input().split() data = list(map(int,data)) avg = np.mean(data) for i in data: if i > avg: print(i,end = '

Legendwqs的博客 1万+

type_struct使用教程

type_struct使用教程 1. 项目介绍 type_struct 是一个旨在提供更佳结构体定义方式的库,它主要针对Ruby语言。这个项目通过引入一种伪类型系统,使得在结构体中定义成员类型成为可能,进而增强了代码的可读性和健壮性。相比于传统的Hash或Struct,type_struct通过检查类型的方式增加了对数据结构的约束,避免了错误类型的数据注入,提高了开发时的代码质量。该库遵循MIT...

gitblog_01127的博客 529

小米手机免登录开启USB安装与调试(MIUI 9-11实测,已Root可用)

本文详细介绍了小米手机免登录开启USB安装与调试的底层方案,适用于已Root的MIUI 9-11版本设备。通过修改系统配置、禁用MIUI安装器验证和强制开启USB调试等步骤,帮助开发者绕过账号限制,实现快速调试。文章包含不同MIUI版本的兼容性处理和常见问题解决方法,实测有效。

weixin_33675507的博客 289

【毕业设计】QT实战:从零构建仿QQ通讯系统,打造你的简历亮点项目

本文为计算机专业毕业生提供了一份详尽的毕业设计实战指南,教你如何从零开始使用QT框架构建一个仿QQ的即时通讯系统。文章深入剖析了项目规划、核心模块(登录、聊天、好友管理)的实现、TCP粘包处理、数据库设计等关键技术难点,并分享了如何将此项目打造成简历亮点,有效提升求职竞争力。

omega的博客 443

c++与c语言的struct和type struct区别

在C中定义一个结构体类型可用typedef简化声明变量语句,少写一个struct单词。

unforgetablebaby的博客 1095

API安全攻防实战:从信息搜集到漏洞利用的完整路径

本文详细解析了API安全攻防实战的全过程,从信息搜集到漏洞利用,涵盖了渗透测试的核心技巧和工具使用。通过真实案例展示如何发现和利用API漏洞,如HTTP方法滥用、内容类型转换攻击等,并提供企业级防御策略和测试心得,帮助安全研究人员提升API安全防护能力。

weixin_30394981的博客 434

结构体定义 typedef struct 用法详解和小结

typedef可以声明新的类型名来代替已有的类型名,但却不能增加新的类型.typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。在编程中使用typedef目的一般有两个,一个是给变量提供一个易记且意义明确的新名字(类型有新别名,方便变量的定义),另一个是简化一些比较复杂的类型声明。在上述的变量定义中,s1、s2、s3都被定义为char *,而s4则定义成了char,不是我们所预期的指针变量,根本原因就在于#define只是简单的字符串替换而typedef则是为一个类型起新名字。

Cerulea_n的博客 4万+

行为预测模型:Social LSTM与Graph Neural Networks

行为预测模型:Social LSTM与Graph Neural Networks ,人工智能,计算机视觉,大模型,AI,本文围绕行为预测模型Social LSTM与Graph Neural Networks展开,介绍了两者的基础概念、原理、应用场景,还对比了它们在优势、劣势和适用场景上的不同,最后给出了相应的代码示例。Social LSTM基于LSTM,通过社交池化层处理多智能体交互;图神经网络处理图结构数据,靠消息传递获取信息,二者各有侧重,适用于不同场景。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 15万+

MATLAB - ROS 2 工具箱入门教程

ROS 工具箱提供了一个连接 MATLAB® 和 Simulink® 与机器人操作系统(ROS 和 ROS 2)的接口。利用该工具箱,您可以设计 ROS 节点网络,并将 MATLAB 或 Simulink 生成的 ROS 节点与现有的 ROS 网络相结合。工具箱包括 MATLAB 函数和 Simulink 块,可通过记录、导入和回放 rosbag 文件来可视化和分析 ROS 数据。您还可以连接到实时 ROS 网络,访问 ROS 消息。

机器人控制与仿真应用 3068

Golang 中type name 和 type struct区别

golang中type 关键字大致有如下功能 1:定义结构,接口 type TestStruct struct{ //XXXXXX } type TestInterface interface{ //XXXXXXXXXX } 2:以现有类型定义一个新的类型 type MyInt int 3:定义别名,仅仅是个别名 alias type MyInt=int type NameMap = map[string]interface{} 4:定义函数类型 type cb

zhangdell的专栏 1651

EfficientNet 改进:添加混合卷积提取特征

混合卷积(Mixed Convolution)是一种在卷积神经网络(CNN)中结合多种卷积操作的策略,旨在通过融合不同卷积核大小或类型的卷积操作来提升模型的性能和灵活性。:例如标准卷积、深度可分离卷积(Depthwise Separable Convolution)、分组卷积(Grouped Convolution)等,可以在计算效率和特征提取能力之间取得平衡。混合卷积可以根据任务需求动态调整卷积操作的组合方式,适应不同的输入数据分布。:通过引入可学习的权重,动态调整不同卷积操作的贡献。

Henry的博客 660

go struct和type类型的函数区别

type 的区分参数指针还是值 struct的可以自动转义 type Celsius float64 func (c Celsius) String() string { //return strconv.FormatFloat(float64(*c), 'f', 0, 64) + "°C" //fmt.Println(int(*c)) return strconv.Itoa(int(...

ysj的博客 2396

PostgreSQL的学习心得和知识总结(一百二十六)|深入理解PostgreSQL数据库SQL执行时间计算 \timing 和 log_duration的使用和原理

1、参考书籍:《PostgreSQL数据库内核分析》2、参考书籍:《数据库事务处理的艺术:事务管理与并发控制》3、

孤傲小二~阿沐的博客 984

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

go语言学习笔记 — 进阶 — 反射(3):反射的类型对象(reflect.Type)— 反射类型对象的类型名(Type)和种类(Kind)

在使用反射时,需要首先理解类型(Type)和种类(Kind)的区别。在编程中,使用最多的是类型(Type),但在反射中,当我们需要区分一个大类时,就要用到种类(Kind)。例如,统一判断类型中的指针时,使用种类(Kind)就更方便。 反射种类(Kind)的定义 类型(Type) go中的类型是指原生的基本数据类型(int、string、bool、float32)和使用type关键字自定义的类型(struct、其他类型),这些类型的类型名就是其类型本身的名称,如type A struct {},类型是A。

yjk13703623757的博客 3698

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C# Primitive、Reference 和Value Type

Primitive Type:能够定义成 “int a = 0”而不是必须通过new关键字定义的数据类型就是primitive type。下表是C#中的Primitive type对应的FCL类型  Reference Type:用new操作符定义,在托管堆中分配存储空间的数据类型是Reference Type。建立一个Reference Type的开销较大,可能触发垃

523

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

自定义类型命名中_s,_t后缀的解释

在阅读linux内核的过程中,经常会碰到自定义类型,如:typedef struct aa_s{...};起初看时有点不明白_s和_t的区别,直到前几天才恍然大悟。按照我的理解:_s后缀应该是表示struct(一个结构体)的意思。_t后缀应该是表示一个type(一个类型)。下面举个例子:struct record_s{    int a;    int b;};typedef struct rec

Learning & Researching 4333

不可不知的C#基础 2. -–从 struct 和 class的异同

从起源/定义说起 Struct 从C 的时代就已经有了(向丹尼斯.里奇致敬), 它是Structure 的缩写 -- 就是结构的意思. 它是一种最初级的数据结构, 它包含一到多个相同类型或不同类型的值或者变量. 它就像是一个存储数据的"包".   Class(类) 是有了面向对象概念之后才有的, 它"是创建对象的蓝图,描述了所创建的对象共同的属性和方法".   从它们被创立的用途可以看出

jackzhang083的专栏 425

go面向对象编程:结构体struct详解、结构体实例的创建方式、结构体之间的转换(type取别名的使用)、方法的注意事项及与函数的区别

入门示例 package main import "fmt" //定义老师结构体,将老师中的各个属性 统一放入结构体中管理: type Teacher struct{ //变量名字大写外界可以访问这个属性 Name string Age int School string } func main(){ //创建老师结构体的实例、对象、变量: var t1 Teacher // var a int

学亮编程手记 1265

C/C++/Python中类和类型的区别

类:class,类型:type (注意:python2.2 之后类与类型已经统一!!!) Class is a type.Types describe objects, references and functions. 所有的类型可以分为两大种:1. 基本类型(int char dou...

ciddk2085的博客 518

flatbuffers 使用问题记录

1. 命名空间的问题 ----------------------------- namespace 1.0.3 版本包含文件类型前面不需要加命名空间,但是1.1.0 中包含需要在类型前加命名空间 include必须放在namespace前面 例如: include “aa.fbs” namespace IM.test; foo.fbc namespace f...

weixin_30326745的博客 309

彻底弄清楚反射机制

反射是 Go 在的机制。

wuDiNiTian的博客 196

Interface 与结构体

interface类型的nil的type是 nil,value是空 (*Struct)(nil) 赋值过的nil的type是 *Struct,value是nil 因此不相等

码农印象 425

go[7]-反射

反射(reflect)功能是让我们能在运行期间获取对象的类型。 Type和Kind 可以定义类型的别名,类型是真实比对真实的基本类型。下面有一个例子代码可以看出二者的差别。 package main import ( "fmt" "reflect" ) type X int // 取了一个别名 type Y int func main() { var a, b...

Abel's Blog 158

typedef struct与struct的区别

第一篇:typedef struct与struct的区别 1. 基本解释 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。 在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。 至于typedef有什

abilly的专栏 873
上一篇: 关于C++的小细节
下一篇: C++ 学习之旅
henhaoji_123
博客等级 码龄10年 260粉丝 283原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值