结构体类型

【C++】关键字struct

徘徊边缘 提交于 2020-01-20 22:18:17
网址连接 https://www.cnblogs.com/zhengfa-af/p/8144786.html 主要内容: 1. C语言中,结构体的3中不同声明和定义方式; 2. struct在C和C++中的区别。C++可以在struct中添加函数,类似于class; 3. C++中,struct和class的区别。 struct的成员默认权限是public,class的成员默认权限是private; struct的默认继承方式是public,class的默认继承方式是private; 4. 结构体的作用——封装; 5. 结构体的大小和内存对齐; 为了提高存储的速度,VC对结构体内的变量存储的起始地址进行“对齐”操作。 1)默认对齐方式:结构体中每个成员的起始地址相对于结构体内存起始地址的偏移量必须是当前成员所占用内存大小(字节数量)的倍数。同时,VC为了保证结构体的内存大小是字节边界数(即结构中占用内存最大的成员类型的字节数)的倍数,会在最后一个变量申请内存后,根据需要充填相应的字节数。 2)在VC中提供了#pragmapack(n)来设定变量以n字节对齐方式。 来源: https://www.cnblogs.com/gdut-gordon/p/11516615.html

传值传址 结构体

微笑、不失礼 提交于 2020-01-19 01:00:11
传值 class Program { //传值 public void hs(int a,int b) { b = a + 10; } } static void Main(string[] args) { Program hanshu = new Program(); //传值:将变量名中存放的值进行传输 int x = 5; int y = 10; hanshu.hs(x,y); Console.WriteLine(y); }结果为10    传址class Program { //out 传址 public void hs1(int a, out int b) { b = a + 10; } static void Main(string[] args) { Program hanshu = new Program(); //传址:将这个变量名直接传输过去,若在另一边有负值情况,这边的值会发生变化 int x = 5; int y = 10; hanshu.hs1(x, out y); Console.WriteLine(y); Console.ReadLine(); }结果为15    结构体class Program { //结构体:自定义类型 值类型 //一组变量的组合 //需要定义的位置 class里面 main函数外面 //包含的变量可以是多种数据类型 /

传值 传址 结构体

心已入冬 提交于 2020-01-19 00:59:18
传值是只传递这个变量的值,传值是传递这个变量的地址。 结构体: 结构体:自定义类型 值类型 一组变量的组合 需要定义的位置,class里面,main函数外面,里面包含的变量可以使多种数据类型的。 习题: 学生信息的结构体:学号 姓名 性别 分数 练习:超市购物问题 去超市选择要购买的商品 0.开始购买 1.洗发水 15元 2.牙刷 5元 3.可口可乐 3元 4.水杯 12元 5.毛巾 6元 6.结算 输入想要的物品编号,输入每种商品需要买几件 结算:需要列出来商品名称、单价、数量、 总价以及所有物品总价,结账时间 然后输入交给收银员的钱数, 不够,请继续交钱 够,结算,找钱 来源: https://www.cnblogs.com/lemon233-/p/6001813.html

golang之不安全编程

无人久伴 提交于 2020-01-19 00:38:16
楔子 不安全编程?用golang以来也没发现有啥不安全的啊,而且golang有垃圾回收,也不需要我们来管理内存。当听到不安全编程这几个字,唯一能想到的也就是指针了,只有指针才可能导致不安全问题。我们知道golang中是有指针的,但是golang的指针并不能像C语言中的指针一样,可以进行运算,所以golang中的指针既提供了指针的便利性,又保证了安全。但是在golang中,可以通过一个叫做 unsafe 的包让指针突破限制,从而进行运算,一旦用不好会导致很严重的问题,但是用好了在某些场景下能够带来很大的便利,所以我们说这是不安全编程。但即便如此,我们还是可以使用的,而且golang的内部也在大量的使用unsafe这个包。 golang中的指针 尽管golang的指针没有C的指针那么强大,但是能够获取一个变量的地址,并且能通过地址来改变存储的值,我个人认为已经足够了。 package main import "fmt" func pass_by_value(num int){ num = 3 } func pass_by_pointer(num *int){ *num = 3 num = nil } func main() { num := 1 pass_by_value(num) fmt.Println("传递值:", num) //传递值: 1 pass_by_pointer(

Unity Shader入门精要学习笔记 - 第17章 Unity的表面着色器探秘

筅森魡賤 提交于 2020-01-17 15:36:53
转自 冯乐乐的《Unity Shader 入门精要》 2010年的Unity 3 中,Surface Shader 出现了。 表面着色器的一个例子。 我们先做如下准备工作。 1)新建一个场景,去掉天空盒子 2)新建一个材质,新建一个Shader,赋给材质。 3)场景中创建一个胶囊体,上步材质赋给它 然后我们修改Shader代码: Shader "Unity Shaders Book/Chapter 17/Bumped Diffuse" { Properties { _Color ("Main Color", Color) = (1,1,1,1) _MainTex ("Base (RGB)", 2D) = "white" {} _BumpMap ("Normalmap", 2D) = "bump" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 300 CGPROGRAM #pragma surface surf Lambert #pragma target 3.0 sampler2D _MainTex; sampler2D _BumpMap; fixed4 _Color; struct Input { float2 uv_MainTex; float2 uv_BumpMap; }; void surf (Input IN,

文件搜索和图像裁剪

情到浓时终转凉″ 提交于 2020-01-16 03:08:49
文件搜索有一个类struc_finddata_t,一下内容转自:http://blog.csdn.net/wzhwho/article/details/6372353 到底如何查找文件呢?我们需要一个结构体和几个大家可能不太熟悉的函数。这些函数和结构体在的头文件中,结构体为struct _finddata_t ,函数为_findfirst、_findnext和_fineclose。具体如何使用,我会慢慢讲来~ 首先讲这个结构体吧~ struct _finddata_t ,这个结构体是用来存储文件各种信息的。说实话,这个结构体的具体定义代码,我没有找到,不过还好,文档里面在_find里有比较详细的成员变量介绍。我基本上就把文档翻译过来讲吧: unsigned atrrib: 文件属性的存储位置。它存储一个unsigned单元,用于表示文件的属性。文件属性是用位表示的,主要有以下一些:_A_ARCH(存档)、 _A_HIDDEN(隐藏)、_A_NORMAL(正常)、_A_RDONLY(只读)、_A_SUBDIR(文件夹)、_A_SYSTEM(系统)。这些都是在中定义的宏,可以直接使用,而本身的意义其实是一个无符号整型(只不过这个整型应该是2的几次幂,从而保证只有一位为 1,而其他位为0)。既然是位表示,那么当一个文件有多个属性时,它往往是通过位或的方式,来得到几个属性的综合。例如只读

结构体的四种定义方法

£可爱£侵袭症+ 提交于 2020-01-16 00:56:01
1.先定义结构体类型,再定义结构体变量 struct student{ int data; }; struct student stu1;//stu1为student的结构体变量 2.定义结构体变量的同时,定义结构体变量 struct student{ int data; }stu1; 如果想要继续定义结构体变量 struct student stu2;//这样既可以再次定义结构体变量 3.不定义结构体类型,而直接定义结构体变量 struct{ int data; }stu1; 这样做的缺陷很大,这样的话我们就不能再次定义stu1该类型的结构体变量了,可移植性非常差,也不灵活。 4.用typedef 来定义结构体变量及类型 typedef sturct node{ int data; }Binode; 这样定义的话,结构体类型的名字就有了两个分别为node和Binode 自然定义结构体变量的方式也就有了两种 1.struct node val1 2.Binode val2 我在写代码时一般采用该种方法,个人喜好。 来源: https://www.cnblogs.com/zoutingrong/p/12199382.html

C# struct 结构体

ぃ、小莉子 提交于 2020-01-15 00:52:51
参考: https://blog.csdn.net/zeroflamy/article/details/52081462 https://www.w3cschool.cn/csharp/csharp-struct.html 1、C# 结构的特点 1. C#中struct结构体是一个特殊的存在,值类型、栈内拷贝(值类型栈内拷贝决定了struct许多使用特点类似int)。 2. C# 中的结构与传统的 C++ 中的结构不同。C# 中的结构有以下特点: (1)结构可带有方法、字段、索引、属性、运算符方法和事件。 (2)结构可定义构造函数,不能定义析构函数。但不能定义默认构造函数。默认构造函数是自动定义的,且不可改变。 (3)与类不同,结构不能继承其他的结构或类。也不能作为其他结构或类的基础结构。 (4)结构可实现一个或多个接口。 (5)结构成员不能指定为 abstract、virtual 或 protected,这三个关键词都与继承有关,结构不能继承。 (6)当使用 new 创建一个结构对象时,会调用适当的构造函数来创建结构。与类不同,结构可以不使用 new 即可被实例化。 如果不使用 new,只有在所有的字段都被初始化之后,字段才被赋值,对象才被使用。(栈内分配内存,也就不需要使用new在堆上分配内存)。 2、类和结构的区别 (1)类是引用类型,结构是值类型。 (2)结构不支持继承。

Linux学习之socket编程(一)

家住魔仙堡 提交于 2020-01-15 00:13:43
socket编程 socket的概念:     在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程,“IP地址+端口号”就称为socket。   在TCP协议中,建立连接的两个进程各自有一个socket来标识,那么这两个socket组成的socket pair就唯一标识一个连接。socket本身有“插座”的意思,因此用来描述网络连 接的一对一关系。   TCP/IP协议最早在BSD UNIX上实现,为TCP/IP协议设计的应用层编程接口称为socketAPI。   本章的主要内容是socket API,主要介绍TCP协议的函数接口,最后介绍UDP协议和UNIXDomain Socket的函数接口。 socket socket-api 1.基础知识 网络字节序     我们已经知道,内存中的多字节数据相对于内存地址有大端和小端之分,磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分。网络数据流同样有大端小端之分,那么如何定义网络数据流的地址呢?发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出,接收主机把从网络上接到的字节依次保存在接收缓冲区中,也是按内存地址从低到高的顺序保存,因此,网络数据流的地址应这样规定:先发出的数据是低地址,后发出的数据是高地址。   TCP/IP协议规定,网络数据流应采用大端字节序,即低地址高字节

C语言笔记—结构体2

十年热恋 提交于 2020-01-14 09:19:19
C语言笔记—结构体2 1. 结构体操作 1.1 取地址 1.2 传参 2. 结构体指针 3. 结构数组 4. 结构体嵌套 5. 使用结构体 1. 结构体操作 1.1 取地址 struct Point3D { int x ; int y ; int z ; } ; struct Point3D p = { 1 , 2 , 3 } ; printf ( "&p = %p\n" , & p ) ; printf ( "&(p.x) = %p\n" , & p . x ) ; printf ( "&(p.y) = %p\n" , & p . y ) ; printf ( "&(p.z) = %p\n" , & p . z ) ; 结构体名不是结构体变量的地址,必须使用 & 获取地址。 数组名即地址。 1.2 传参 void Print ( struct Point3D p ) { printf ( "(%d,%d,%d)" , p . x , p . y , p . z ) ; } 整个结构体作为参数的值传入函数。这时候在函数内新建一个结构体变量并复制值。结构体可以作为返回值,也是结构体整体复制。 2. 结构体指针 struct Point3D p = { 1 , 2 , 3 } ; struct Point3D * q = & p ; 结构体指针访问成员