初识Struct

  其实之前学习C#的时候有接触,不过那个时候还小~

记得老师讲操作系统的时候说过这样一句话,软件和硬件最大的区别就是变化。Struct是为了迎合用户日益增长的需求而产生的。开始的时候用变量来存放数据,后来诞生了数组,可以放很多数据类型一致的数据,Struct用来封装小型变量组,包含不同的数据类型。

  Struct结构上跟类很相似,不过两者也有不同。Struct是值类型,实例化在栈上,不能被继承,默认是public,适用于经常使用的一些数据组合成的新类型;
Class是对象类型,实例化在堆上,可以被继承,默认private,适合大的复杂的数据.

下面是一个demo,关于Struct和Class的对比。

		 class TheClass
		    {
		        public int x;
		    }
		    struct TheStruct
		    {
		        public int x;
		    }
		    class TestClass
		    {
		        public static void structtaker(TheStruct s)
		        {
		            s.x = 5;
		        }
		        public static void classtaker(TheClass c)
		        {
		            c.x = 5;
		        }

		        static void Main(string[] args)
		        {

		            TheStruct a = new TheStruct();
		            TheClass b = new TheClass();
		            a.x = 1;
		            b.x = 1;

		            structtaker(a);
		            classtaker(b);
		            Console.WriteLine("a.x={0}", a.x);
		            Console.WriteLine("b.x={0}", b.x);
		        }
		    }

效果图:

此结果说明class传递的是一个引用,传递给classtaker的也是b中的引用,函数里面参数引用的和main里面b引用的是同一块内存,都在堆里面,所以函数的改变b会反映到main里面的b。struct传递是值,而非引用,是实参a的copy值,形参a存储在堆里面,main里面的a存储在栈里面,函数改变a的值不会影响到main里面a的值。

知识对比着学才会更加深刻,应用的时候才可以区分的开。学会利用以前的知识网络,很重要。现在的理解还很表面,以后做项目用到,体会跟感悟会更深的!

时间: 2024-10-05 18:48:51

初识Struct的相关文章

黏包-黏包的成因、解决方式及struct模块初识、文件的上传和下载

黏包: 同时执行多条命令之后,得到的结果很可能只有一部分,在执行其他命令的时候又接收到之前执行的另外一部分结果,这种显现就是黏包. 只有TCP协议中才会产生黏包,UDP协议中不会有黏包(udp协议中数据会直接丢失,俗称丢包) #面试 #首先只有在TCP协议中才有黏包现象,是因为TCP协议是面向流的协议, #在发送的数据传输的过程中还有缓存机制来避免数据丢失 #因此在连续发送小数据的时候,以及接收大小不符的时候,都容易产生黏包现象 #本质是不知道客户端发送的数据长度 面试中解释黏包 #连续send

c#之初识结构(Struct)

C# 结构(Struct) 首先结构是值类型数据结构.它使得一个单一变量可以存储各种数据类型的相关数据.struct 关键字用于创建结构.通俗说:结构就是一个可以包含不同数据类型的集合.它是一种可以自己定义的数据类型. 枚举和结构全是值类型,枚举一般是现实生活中问题的"直译",易于理解比较直观,其次枚举类型则可以将一个类型限制在可控制的范围内.而结构呢?结构使处理不同的数据类型的集合变的简单,比如登记100个学生的信息. 比如定义学生信息的结构如下: 初始化赋值注意事项以后再学习 1

初识句柄操作(控制台窗口小实验)

今日学习了控制台使用句柄操作的方法. 我们都知道,使用iostream也可以向屏幕中输出语句. 但它们只能实现基本的输入输出 操作,对于控制台窗口界面的控制却无能为力,而且不能与stdio.h和conio.h友好相处,因为iostream和它们是C++两套不同的输入. 因此,我们需要句柄类来帮助我们完成这个操作. 下面直接上练习小代码,为贪食蛇清屏的小片段. 经一番查找,习得基本用法. 1 void clrscr(void) { 2 //控制台窗口信息类型 存有缓冲区大小 当前光标位置 窗口显示

hdu3549--Flow Problem(初识最大流)

Flow Problem Time Limit: 5000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 7870    Accepted Submission(s): 3664 Problem Description Network flow is a well-known difficult problem for ACMers. Given a graph, y

Unix/Linux环境C编程入门教程(40) 初识文件操作

?? 1.函数介绍 close(关闭文件) 相关函数 open,fcntl,shutdown,unlink,fclose 表头文件 #include<unistd.h> 定义函数 int close(int fd); 函数说明 当使用完文件后若已不再需要则可使用close()关闭该文件,二close()会让数据写回磁盘,并释放该文件所占用的资源.参数fd为先前由open()或creat()所返回的文件描述词. 返回值 若文件顺利关闭则返回0,发生错误时返回-1. 错误代码 EBADF 参数fd

二、网编之初识Socket套接字结构体

二.初识Socket套接字结构体 1.通用套接字结构体类型 struct sockaddr { sa_family_t sa_family; //协议簇 char sa_data[14]; //协议簇数据 } 通用套接字结构体可以在不同的协议簇之间进行强制转化,Socket网络编程中几乎所有套接字API函数的形参都是通用套接字结构体struct sockaddr. 存在问题: 通用套接字结构体对编程的角度来说,设置很不方便,我们以以太网协议来说,当要设置端口号.IP地址等,那么我需要将端口号与I

初识 go 语言:方法,接口及并发

目录 方法,接口及并发 方法 接口 并发 信道 结束语 前言: go语言的第四篇文章,主要讲述go语言中的方法,包括指针,结构体,数组,切片,映射,函数闭包等,每个都提供了示例,可直接运行. 方法,接口及并发 方法 方法就是一类带特殊的接收者(struct)参数的函数 通过 结构体.方法 调用 示例: type city struct { name, address string } func (c city) sysCity() { c.name = "帝都" fmt.Println

31 socket套接字 struct模块

socket(套接字) 基于socket实现客户端与服务端通信 服务端套接字函数 s.bind()    绑定(主机,端口号)到套接字 s.listen()  开始TCP监听 s.accept()  被动接受TCP客户的连接,(阻塞式)等待连接的到来 客户端套接字函数 s.connect()    主动初始化TCP服务器连接 s.connect_ex()  connect()函数的扩展版本,出错时返回出错码,而不是抛出异常 公共用途的套接字函数 s.recv()       接收TCP数据 s.

初识Python,望君多多关照

在学习Python之前,我们接触过数据结构和网页制作.前者让我们学习如何把C语言运用的更加整齐规范,而后者让我们亲身学习如何运用所学,制作一个静态网页.通过这些课程的学习,让我对C语言产生了比较大的压力,以至于对编程.对这学期的Python课程都有一种如临大敌的感觉. 但是真的学习了这门课程,体会了编码过程中的一些固定运用方法和套路之后,也许过程中对这门课程隐隐约约产生了一点点朦胧的感觉,仿佛他也并没有想象中的那么困难,起码现在的学习让我认为,他可能没有C语言那么繁琐和麻烦.当然,以一个初学者的