结构体类型

FFmpeg结构体彻底分析——AVCodec

孤人 提交于 2019-12-07 04:12:31
/** * AVCodec.一个AVCodec结构体对应一个编解码器,这个结构体表示编解码器本身 */ typedef struct AVCodec { /** * Name of the codec implementation. 编解码实现的名字 * The name is globally unique among encoders and among decoders (but an * encoder and a decoder can share the same name). * This is the primary way to find a codec from the user perspective. */ const char *name; ‍ //编解码器实现的名字,这个名字全局唯一(但是编解码器可以共用一个名字),从用户方面去找编解码器的主要方式 ‍ /** * Descriptive name for the codec, meant to be more human readable than name. * You should use the NULL_IF_CONFIG_SMALL() macro to define it. */ const char *long_name ;//更接近人类可阅读的编解码器的描述名字,要使用NULL_IF

Go语言基础之结构体

半世苍凉 提交于 2019-12-06 15:03:08
类型别名和自定义类型 自定义类型 在Go语言中有一些基本的数据类型,如 string 、 整型 、 浮点型 、 布尔 等数据类型, Go语言中可以使用 type 关键字来定义自定义类型。 自定义类型是定义了一个全新的类型。我们可以基于内置的基本类型定义,也可以通过struct定义。例如: //将MyInt定义为int类型 type MyInt int 通过 Type 关键字的定义, MyInt 就是一种新的类型,它具有 int 的特性。 类型别名 类型别名是 Go1.9 版本添加的新功能。 类型别名规定:TypeAlias只是Type的别名,本质上TypeAlias与Type是同一个类型。就像一个孩子小时候有小名、乳名,上学后用学名,英语老师又会给他起英文名,但这些名字都指的是他本人。 type TypeAlias = Type 我们之前见过的 rune 和 byte 就是类型别名,他们的定义如下: type byte = uint8 type rune = int32 类型定义和类型别名的区别 类型别名与类型定义表面上看只有一个等号的差异,我们通过下面的这段代码来理解它们之间的区别。 //类型定义 type NewInt int //类型别名 type MyInt = int func main() { var a NewInt var b MyInt fmt.Printf(

Rust 入门 (五)

自古美人都是妖i 提交于 2019-12-06 15:01:51
定义并介绍结构体 结构体和我们前面学习的元组类似,结构体中的每一项都可以是不同的数据类型。和元组不同的地方在于,我们需要给结构体的每一项命名。结构体较元组的优势是:我们声明和访问数据项的时候不必使用索引,可以直接使用名字。 声明结构体 我们直接看一个结构体的例子: struct User { username: String, email: String, sign_in_count: u64, active: bool, } 结构体使用关键字 struct 开头,紧跟结构体的名字,之后就是大括号包裹的多条结构体数据项,每个数据项由名字和类型组成,我们把每个数据项称为字段。 结构体实例化 我们声明了一个结构体后,如何使用它呢?接下来创建一个结构体的实例: let user1 = User { email: String::from("someone@example.com"), username: String::from("someusername123"), active: true, sign_in_count: 1, }; 可以看到,创建结构体实例 (结构体实例化) 是直接以结构体名字开头,之后就是大括号包裹的键值对。这些键值对顺序和声明结构体的顺序无关,换句话说,声明结构体就是定义一个通用的模版,结构体实例化就是给模版填充值。 结构体数据的存取 创建了结构体实例

快速上手Gobject

百般思念 提交于 2019-12-06 14:54:11
What is G-object? — 很多人被灌输了这样一种概念:要写面向对象程序,那么就需要学习一种面向对象编程语言,例如C++、Java、C#等等,而C语言是用来编写结构化程序的。 — 事实上,面向对象只是一种编程思想,不是一种编程语言。换句话说,面向对象是一种游戏规则,它不是游戏。 — Gobject,亦称Glib对象系统,是一个程序库,它可以帮助我们使用C语言编写面向对象程序;它提供了一个通用的动态类型系统(GType)、一个基本类型的实现集(如整型、枚举等)、一个基本对象类型-Gobject、一个信号系统以及一个可扩展的参数/变量体系。 Why Bother to use Gobject ? — GObject告诉我们,使用C语言编写程序时,可以运用面向对象这种编程思想。 — Gobject系统提供了一个灵活的、可扩展的、并且容易映射到其他语言的面向对象的C语言框架。 — GObject的动态类型系统允许程序在运行时进行类型注册,它的最主要目的有两个: 1)使用面向对象的设计方法来编程。GObject仅依赖于 GLib 和 libc ,通过它可使用纯C语言设计一整套面向对象的软件模块。 2)多语言交互。在为已经使用 GObject框架写好的函数库建立多语言连结时,可以很容易对应到许多语言,包括C++、Java、Ruby、Python和.NET/Mono等

反射 go

我的梦境 提交于 2019-12-06 11:15:19
reflect.Valueof 到底是个什么? 反射值对象(reflect.Value)提供一系列方法进行零值和空判定,如下表所示。 反射值对象的零值和有效性判断方法 方 法 说 明 IsNil() bool 返回值是否为 nil。如果值类型不是通道(channel)、函数、接口、map、指针或 切片时发生 panic,类似于语言层的 v== nil 操作 IsValid() bool 判断值是否有效。 当值本身非法时,返回 false,例如 reflect Value不包含任何值,值为 nil 等。 下面的例子将会对各种方式的空指针进行 IsNil() 和 IsValid() 的返回值判定检测。同时对结构体成员及方法查找 map 键值对的返回值进行 IsValid() 判定,参考下面的代码。 代码一: 反射值对象的零值和有效性判断: package main import ( "fmt" "reflect" ) func main() { // *int的空指针 var a *int fmt.Println("var a *int:", reflect.ValueOf(a).IsNil()) // nil值 fmt.Println("nil:", reflect.ValueOf(nil).IsValid()) // *int类型的空指针 fmt.Println("(*int)

rust结构体

限于喜欢 提交于 2019-12-06 10:00:24
//Rust 并不允许只将某个字段标记为可变 struct User { email: String, name:String, age:i32, sex:String, active:bool, } fn main() { let mut user1=User{ email: String::from("1@qq.com"), name:String::from("hehe"), age:23, sex: String::from("man"), active:true, }; user1.name =String::from("zhangsan"); let user2 = User { email: String::from("3@qq.com"), name: String::from("lisa"), ..user1 //其余值来自 user1 变量中实例的字段,简写形式 }; let user3=set_user_value(String::from("2@qq.com"),String::from("xiaohong")); } fn set_user_value(email:String,name:String)->User { //参数名和结构体的名字相同时,可简写比如email:email 可以直接写email, User { email, name, age

PHP 源码阅读日记

狂风中的少年 提交于 2019-12-06 09:50:56
最近比较闲,正好借这个时间看看PHP源码,有看到不懂的地方会记录一下,之后会把问题以及答案都写下来。 1.C语法生疏需要复习。(后面会写相关复习的内容) (1)struct 结构体 struct是一种数据结构,就是一组相关数据的集合,比方说学生的姓名,性别,身高等信息的集合,因为数组不能存放这样的信息(数组内的元素长度和类型必须一致),所以struct就诞生了。 struct学习代码(比较基础)参考 http://blog.csdn.net/huqinwei987/article/details/23625823 //struct的定义以及内部成员的赋值 struct 结构体名称 { 成员列表 } //举例 学生的结构体 struct student { int id; //学生id char *name; //姓名 float weight;//体重 int sex; //性别 } //结构体的内部成员赋值 方式一(逐一赋值,太麻烦) struct student xiaohei; xiaohei.id = 0; xiaohei.name = "宁金"; xiaohei.weight = 52.1; xiaohei sex = 1; //结构体的内部成员赋值 方式二(比较方便哈) struct student xiaohei = {1,"xiaohei",52.1,1}; /

C#学习笔记05--枚举/结构体

不羁的心 提交于 2019-12-06 07:41:13
一.枚举 当变量的取值范围是固定的几个时, 就可以使用枚举类型, 这样会更加简洁方便 1.1.定义: 访问修饰符 enum 枚举类型名 { 成员1, 成员2, 成员3, ... } public enum Days { Mon = 1, Tue, Wed, Thu, Fri, Sat, Sun } enum: 是枚举的关键字; Days 枚举类型名; Mon, Tue, Wed,...是枚举成员变量 枚举类型赋值只能是成员变量; 枚举的默认值是从0开始的, 可以人为改变 以下个会在上一个的基础上默认加1; 1.2.枚举的使用 语法格式: 枚举类型 枚举变量名 = 枚举类型.枚举值: Days date = Days.Sun; Console.WriteLine(date); // Sun 如果想要得到 成员变量对应的数字 可以进行一个强制类型转换 Console.WriteLine((int)date); // 7 注意: 当给枚举变量赋值时, 其值只能通过枚举类型名加点运算符, 从定义的枚举类型后面的{}里面选取, 故枚举类型限制了枚举变量的取值, 因此在编程过程中, 使用枚举类型可以让我们的数据保持统一. 系统会给枚举值赋一个默认的int类型的值, 第一个枚举值是0, 后面的枚举值所对应的int 值依次加1; 故枚举类型本质上也是个int类型的值, 可以在int

结构体

偶尔善良 提交于 2019-12-06 06:44:15
结构体先定义后调用,定义的时候不分配内存,创建时才分配内存 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<time.h> struct mycoach//mycoach是结构体类型,如果省略就是无名结构体 { //还可以包含其他结构体,其中每个元素的内存都相互独立 char name[30]; int age; }; void main() { struct mycoach cpc; sprintf(cpc.name,"陈培昌");//字符串不可以等号赋值,strcpy()---在string模块下 printf("\n%s",cpc.name); system("pause"); } 一次性可以声明多个 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<time.h> struct mycoach//mycoach是结构体类型,如果省略就是无名结构体 { //还可以包含其他结构体,其中每个元素的内存都相互独立 char name[30]; int age; char expertin[100]; }; void main() { struct mycoach cpc

小知识点记录

自闭症网瘾萝莉.ら 提交于 2019-12-06 05:39:44
JsonP // 利用script的src属性绕过浏览器的同源策略,但是只能发GET请求 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> <p> <input type="button" onclick="Jsonp1();" value='提交'/> </p> <p> <input type="button" onclick="Jsonp2();" value='提交'/> </p> <script type="text/javascript" src="jquery-1.12.4.js"></script> <script> function Jsonp1(){ var tag = document.createElement('script'); tag.src = "http://c2.com:8000/test/"; document.head.appendChild(tag); document.head.removeChild(tag); }      function list(data){          console.log(data)      } function Jsonp2(){ $.ajax({ url: