精华内容
下载资源
问答
  • 搜索字段(AStruct) - 显示结构数组 AStruct 的所有字段及其完整(“长”)名称。 搜索字段(AStruct,SearchString) - 显示结构数组 AStruct 名称包含 SearchString 的所有字段(默认 = 不区分大小写)。 ...
  • 结构体中位字段

    2018-02-06 18:28:16
    原文章: http://blog.csdn.net/qqyuanhao163/article/details/52229321
    展开全文
  • 在字符串搜索包含在给定结构字段名称,然后用相应的字段值替换每次出现的字段名称。 在需要改变参数的模拟过程,我使用它来动态更改绘图上的标题。 图片的标题代码: % 正常使用(第 2 行) >> q.mu = 0...
  • 根据结构体中任意字段进行排序 Sort() Reverse() Less(i,j int) bool Len() int Swap(i,j int) package main import ( "fmt" "sort" ) type Student struct { Number string Name string Age int IsWalker ...

    排序

    根据结构体中任意字段进行排序

    Sort()

    Reverse()

    Less(i,j int) bool

    Len() int

    Swap(i,j int)

    package main
    
    import (
    	"fmt"
    	"sort"
    )
    
    type Student struct {
    	Number   string
    	Name     string
    	Age      int
    	IsWalker bool
    	Weight   float32
    }
    
    type ByNumber []*Student
    
    func (this ByNumber)Len() int  {
    	return len(this)
    }
    
    func (this ByNumber)Less(i,j int) bool  {
    	return this[i].Number<this[j].Number
    }
    
    func (this ByNumber)Swap(i,j int) {
    	this[i],this[j] = this[j],this[i]
    }
    
    func (this ByNumber) String() string {
    	const  format = "| %v |\t%v |\t%v |\t %v |\t %v |\t%v   |\n"
        fmt.Println("\t\t\t\t\t学生信息表")
        fmt.Println(" 序号\t学号 \t姓名\t   年龄\t  体重\t   是否走读")
    	for k,v:=range this{
    		fmt.Printf(format,k+1,v.Number,v.Name,v.Age,v.Weight,v.IsWalker)
    	}
    	return ""
    }
    
    func main1() {
    	sts:=[]*Student{
    		&Student{Number: "003",Name: "张三"},
    		&Student{Number: "004",Name: "张四"},
    		&Student{Number: "001",Name: "张一"},
    		&Student{Number: "002",Name: "张二"},
    		&Student{Number: "000",Name: "张零"},
    	}
    	b:=ByNumber(sts)
    	sort.Sort(b)
    	fmt.Println(b)
    	fmt.Println("反转")
    	sort.Sort(sort.Reverse(b))  //反转的用法
    	fmt.Println(b)
    
    
    	//为结构体内的每一个字段都绑定一个排序的外壳,这种操作显然不是很聪明
        //这时候使用组合来解决这个问题
    }
    
    
    type customSort struct {
    	s []*Student
    	less func(i,j *Student)  bool
    }
    
    func (this *customSort)Len() int {
    	return len(this.s)
    }
    
    func (this *customSort)Swap(i,j int) {
    	this.s[i],this.s[j] = this.s[j],this.s[i]
    }
    
    func (this *customSort)Less(i,j int) bool {
    	return this.less(this.s[i],this.s[j])
    }
    
    func main()  {
    	sts:=[]*Student{
    		&Student{Number: "003",Name: "张三"},
    		&Student{Number: "004",Name: "张四"},
    		&Student{Number: "001",Name: "张一"},
    		&Student{Number: "000",Name: "张二"},
    		&Student{Number: "002",Name: "张二"},
    	}
    
    	c:=&customSort{
    		s: sts,
    		less: func(i, j *Student) bool {
    			if i.Number != j.Number {    //可以指定多种排序规则
    				return i.Number>j.Number
    			}
    			if i.Name!=j.Name{
    				return i.Name<j.Name
    			}
    			return false
    		},
    	}
    
    	/*
    	package sort
    	// A type, typically a collection, that satisfies sort.Interface can be
    	// sorted by the routines in this package. The methods require that the
    	// elements of the collection be enumerated by an integer index.
    	type Interface interface {
    		// Len is the number of elements in the collection.
    		Len() int
    		// Less reports whether the element with
    		// index i should sort before the element with index j.
    		Less(i, j int) bool
    		// Swap swaps the elements with indexes i and j.
    		Swap(i, j int)
    	}
    */
    
    	sort.Sort(c) //Sort方法中不只能放slice类型,还可以放结构体类型,只要改类型 实现 Sort接口
    	fmt.Println(ByNumber(sts)) //单纯的使用一下ByNumber中重写是String()方法
    }
    
    
    展开全文
  • C语言-结构体中的冒号:位字段

    万次阅读 2017-08-12 22:23:28
    位字段:一个int或者unsigned int类型变量的一组相邻的位字段通过一个结构声明来建立,该结构声明为每个字段提供标签,并确定该字段的宽度。不同于一般结构体的是它在定义成员的时候需要指定成员所占的位数...

    位字段定义

    位字段:一个int或者unsigned int类型变量中的一组相邻的位。
    位字段通过一个结构声明来建立,该结构声明为每个字段提供标签,并确定该字段的宽度。不同于一般结构体的是它在定义成员的时候需要指定成员所占的位数。

    位字段用途

    带有位字段的结构提供一种记录设置的方便途径。许多设置(如,字体的粗体或者斜体)就是简单的二选一。例如,开或关、真或假。如果只需要使用1位,就不需要使用整个变量。内含位字段的结构允许在一个存储单元中储存多个设置。它主要用于一些使用空间很宝贵的程序设计中,如嵌入式程序设计。

    使用单个位例子

    例如,下面的结构体声明建立了一个 4个1位的字段。

    //结构体PRNT的声明中,包含了4个1位的字段。
    struct PRNT
    {
        unsigned int autfd : 1;  //占用1位
        unsigned int bldfc : 1;  //占用1位
        unsigned int undln : 1;
        unsigned int itals : 1;
    } obj;
    
    //结构体赋值操作,现在可以通过普通的结构成员运算符(.)单独给这些字段赋值。
    obj.itals = 0;  
    obj.undln = 1;  //可以为0,可以为1,因声明了一位只有两种选择

    由于每个字段恰好为1位,所以只能为其赋值1或0。变量obj被储存在int大小的内存单元中,但是以上结构体只使用了其中的4位。

    使用多个位例子

    有时,某些设置也有多个选择,因此需要多位来表示。字段不限制1位大小。可以使用如下方式:

    //创建两个2位字段和一个8位字段的结构体
    struct PRCODE
    {
        unsigned int code1 : 2;  //支持二进制的四个数:00,01,10,11
        unsigned int code2 : 2;
        unsigned int code3 : 8;
    }prcode;
    
    //赋值方式
    prcode.code1 = 0;
    prcode.code1 = 3;
    prcode.code1 = 102;

    声明总位数超出问题

    如果声明的总位数超过了一个unsigned int 类型的大小会怎样?
    会用到下一个unsigned int类型的存储位置。一个字段不允许跨越两个unsigned int 之间的边界。编译器会自动移动跨界的字段,保持unsigned int的边界对齐。一旦发生这种情况,第1个unsigned int中会留下一个未命名的“洞”。

    超出解决办法

    用未命名的字段“填充”未命名的“洞”,使用一个宽度为0的未命名字段迫使下一个字段与下一个整数对齐:

    struct STUFF
    {
        unsigned int field1 : 1;
        unsigned int        : 2;  //未命名的字段
        unsigned int field2 : 1;
        unsigned int        : 0;  //未命名的字段
        unsigned int field3 : 1;
    }stuff;

    这里,在stuff.field1和stuff.field2之间,有一个2位的空隙;stuff.field3将储存在下一个unsigned int中。

    位字段弊端

    字段储存在一个int中的顺序取决于机器。在有些机器上,存储的顺序是从左往右的,而另一些机器,是从右往左的。另外,不同的机器中两个字段边界的位置也有区别。使用位字段定义的数据不能在不同字节顺序的机器之间移动。由于这些原因,位字段通常都不容易移植
    对于位字段中的成员不能用位操作符进行运算,因为它们没有地址。
    尽管如此,有些情况却要用到这种不可移植的特性。例如,以特定硬件设备所用的形式储存数据。

    位字段示例

    #include <stdio.h>
    
    #define true    1
    #define false   0
    
    #define SOLID   0   //实线
    #define DOTTED  1   //点线
    #define DASHED  2   //虚线
    
    //三原色
    #define BLUE    4   //蓝
    #define GREEN   2   //绿
    #define RED     1   //红
    
    //混合色
    #define BLACK   0               //黑色
    #define YELLOW  (RED | GREEN)   //黄色
    #define MAGENTA (RED | BLUE)    //洋红色
    #define CYAN    (GREEN | BLUE)  //蓝绿色、青绿色
    #define WHITE   (RED | GREEN | BLUE)    //白色
    
    typedef unsigned int uint;
    
    const char * colors[8] = {"black", "red", "green", "yellow", "blue", "magenta", "cyan", "white"};
    
    typedef struct Box_Props
    {
        uint opaque : 1;
        uint fill_color : 3;
        uint : 4;
        uint show_border : 1;
        uint border_color : 3;
        uint border_style : 2;
        uint : 2;
    } box_props;
    
    void show_settings(const box_props * pb);
    
    int main()
    {
        //插件并初始化 box_props结构
        box_props box = {true, YELLOW, true, GREEN, DASHED};
    
        printf("Original box setting ");
        show_settings(&box);
        box.opaque = false;
        box.fill_color = WHITE;
        box.border_color = MAGENTA;
        box.border_style = SOLID;
        printf("\nModified box settings:\n");
        show_settings(&box);
    
        return 0;
    }
    
    void show_settings(const box_props * pb)
    {
        printf("Box is %s.\n", pb->opaque == true ? "opaque" : "transpatent");
        printf("The file color is %s.\n", colors[pb->fill_color]);
        printf("Border %s.\n", pb->show_border == true ? "shown" : "not shown");
        printf("The border color is %s.\n", colors[pb->border_color]);
        printf("The border style is ");
        switch(pb->border_style)
        {
        case SOLID: 
            printf ("solid.\n"); 
            break;
        case DOTTED: 
            printf ("dotted.\n"); 
            break; 
        case DASHED: 
            printf ("dashed.\n"); 
            break;
        default:    
            printf ("unknown type.\n");
        }
    }

    下面是该程序的输出:

    Original box setting:
    Box is opaque.
    The file color is yellow.
    Border shown.
    The border color is green.
    The border style is dashed.
    
    Modified box settings:
    Box is transpatent.
    The file color is white.
    Border shown.
    The border color is magenta.
    The border style is solid.

    参考

    1. 位字段-百度百科
    2. c prime plus (第6版) 中文版 15.4 位字段
    3. C语言中的位字段 - caianye的专栏

    C语言书籍资料

    C语言书籍资源汇总-CSDN下载

    展开全文
  • 其中 main_subject 中包含了某同学的主修成绩和学号姓名信息,需要将这些信息地填到包含所有科目信息的另一个结构体 all_subject 对应的字段中(不存在的字段保持默认值),如何比较便利地实现呢? all_subject = ...

    Matlab 结构体之间相同字段的赋值

    假设有两个结构体 main_subjectall_subject 。其中 main_subject 中包含了某位同学的主修成绩和学号姓名信息,需要将这些信息地填到包含所有科目信息的另一个结构体 all_subject 对应的字段中(不存在的字段保持默认值),如何比较便利地实现呢?

    all_subject = 
    
      包含以下字段的 struct:
    
           Name: ''
             ID: 0
        Chinese: 0
           Math: 0
        English: 0
        Physics: 0
        History: 0
    
    main_subject = 
    
      包含以下字段的 struct:
    
           Name: 'Jake'
             ID: 101
        Chinese: 102
           Math: 150
        English: 122
    

    具体的实现如下:

    main_subject = struct('Name', 'Jake',...
                          'ID', 101, ...
                          'Chinese', 102,...
                          'Math', 150,...
                          'English', 122)
    
    all_subject = struct('Name', '', ...
                         'ID', 0, ...
                         'Chinese', 0, ...
                         'Math', 0, ...
                         'English', 0, ...
                         'Physics', 0, ...
                         'History', 0)
    
    cmb = structAssign(all_subject, main_subject)
    
    function [structA] = structAssign(structA, structB)
    % 将 structB 中与 structA 相同字段的成员的值赋值给 structA 对应的成员
    
        keys = fieldnames(structB); % 获得结构体B的所有字段
        for i = 1:length(keys)
            cur_key = keys{i};
            if isfield(structA, cur_key)
                % 2017年后支持: structName.(dynamicExpression)
                % dynamicExpression 是一个变量或表达式,返回字符串标量(结构体字段)
                % 类似于 getfield() 和 setfield() 功能
                structA.(cur_key) = structB.(cur_key);
            else
                warming('字段"%s"不存在!', cur_key);
            end
        end
    
    end
    

    说明:

    1. 不能直接赋值 all_subject = main_subject。直接赋值的结果是 all_subject 完全复制 main_subject,丢失了原来的部分字段。

    2. 关于 Matlab 结构体常用的几个操作函数:

    3. Generate Field Names from Variables Matlab2017版本之后,结构体可以基于变量的字段访问方式,常见的字段访问有

      % 方式1
      main_subject.Chinese = 123;
      chinese = main_subject.Chinese;
      % 方式2
      main_subject.('Chinese') = 123;
      chinese = main_subject.('Chinese');
      % 方式3
      main_subject = setfield(main_subject, 'Chinese', 123);
      chinese = getfield(main_subject, 'Chinese');
      
    展开全文
  • 两个结构体(可能类型一样), 字段名和类型都一样, 想复制一个结构体的全部或者其中某几个字段的值到另一个(即merge操作), 自然想到可以用反射实现. package main import fmt import reflect // 用b的所有字段覆盖a的 ...
  • 结构体保留字段定义

    千次阅读 2019-09-12 16:53:22
    使用结构体时常为了对齐或匹配需要定义一些保留字段,比如定义一个结构体来描述某设备寄存器,因为寄存器本身不是连续的所以在空缺位置要定义保留字段,如下所示: typedef struct { volatile UINT16 fifo; ...
  • // [0.8 0.5 0.4 0.2 0.1] } 按照结构体的某个字段排序 按年纪从大到小排序 type Persons struct { Age int Height int } type PersonsSliceDecrement []Persons func (s PersonsSliceDecrement) Len() int { ...
  • 定义一个数组(学生结构体数组),里面包含学号、姓名、身份证和三科学生成绩,要求写一个函数,根据学生任何一个字段(如学号、姓名、身份证),进行排序。
  • 文章目录结构体位字段 结构体位字段
  • 一 创建结构体变量和访问结构体字段 1定义 a 方式1:直接声明 var person Person b方式2:结构体类型{} var person Person = Person{} c 方式3:new (结构体类型) var person *Person = new (Person) ...
  • Matlab 取结构体中某一特定字段的所有值
  • MatLab 函数“orderfields”的递归版本。... 与仅对顶级字段排序的“orderfields”相反,函数“OrderAllFields”在其所有级别上对结构体数组的字段进行排序(从而也传递具有元胞数组结构而不是结构体数组结构的级别)。
  • 1、头文件 ... size_t offsetof(结构体名, 字段名);  举例子:  size_t iOffset = offsetof(IMAGE_DOS_HEADER, e_lfanew); 3、 转载于:https://www.cnblogs.com/cppskill/p/5569412.html...
  • 结构体(struct)的位字段(:) 详解 本文地址:http://blog.csdn.net/caroline_wendy/article/details/26722511 结构体(struct)可以使用位字段(:), 节省空间, 如以下代码, 结构体a的, 第一个变量x占用1个字符, y...
  • 在验证的过程了,经常遇到C的testcase,C在定义寄存器的时候通常会使用struct 的位字段来实现,比如定义下面一个寄存器 typedef struct reg{ unsigned int field0: 8; unsigned int field1: 8; unsigned i...
  • Filterstruct 允许使用逻辑矩阵来相同地过滤结构的各个字段。 如果 filterlogic 有一列并且字段包含多于一列,则将过滤每个字段的行。 如果 filterlogic 有多个列,则过滤的字段的大小必须与 filterlogic 相同。 只...
  • 本文实例讲述了go语言通过反射获取和设置结构体字段值的方法。分享给大家供大家参考。具体实现方法如下: 代码如下:type MyStruct struct {  N int } n := MyStruct{ 1 } // get immutable := reflect.ValueOf(n) ...
  • #include<stdio.h> struct Student{ char num[6]; char name[100]; int score[3]; }s1[5]; void input(struct Student s[5]) { int i,j=0; printf("进行输入操作:\n"); for(i=0;... ...
  • 获取一个结构体中的某字段的偏移量,linux的内核代码是这样定义实现的: offset = (unsigned long)(&((type*)0))->member); 其中type就是结构体类型,member即某字段名。 这里简单的说明一下这句代码的意思,...
  • 结构体位字段

    2015-06-03 20:48:49
     类似于java的bean,只不过里面的属性都是public,不需要setter,getter,并且不能赋初值。  定义结构体使用struce关键字。如下:struct Person{ int age; char * name; }; 这便定义了一个名为Person的结构体...
  • go语言结构体json编码时候忽略某个字段 话不多说,先上代码 package main import ( "encoding/json" "fmt" ) type Person struct { Name string `json:"name"` Age int `json:"age"` Addr string `json:"addr...
  • matlab查找结构体struct某一字段

    千次阅读 2020-01-07 14:46:55
    需要使用 strcmp({input.Name},‘key’} 解释一下,struct访问时会直接返回结果,比如input.Name,如果直接用会报错,因为返回了太多的结果,所以需要用大括号首先变成cell类型,再使用strcmp(针对char类型)来找到...
  • 1 Golang 在创建结构体实例(变量)时,可以直接指定字段的值。 2 有两种使用方式。 方式 1:在创建结构体变量时,返回结构体本身。 方式 2:在创建结构体变量时,返回结构体的指针类型。 二代码 package main...
  • 在Go,一个结构体如果含有一个指针字段,在默认情况下,使用fmt.Print系列函数打印这个结构体时,并不会打印这个指针指向的值。因此,对于下面的代码: type Foo struct { A int } type Bar struct { F *Foo } ...
  • ip结构体中各个字段含义

    千次阅读 2017-10-10 10:12:06
    cip头各个字段含义 ip is a struct (structure) in the C programming language. The ip struct is used as a template to form an IPv4 header in a raw socket. The structure can be ...
  • 在C语言结构体(struct)指的是一种数据结构,是C语言聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素...
  • Go 通过结构体指定字段进行排序

    千次阅读 热门讨论 2020-12-08 11:44:00
    结构体指定字段进行排序: package main import ( "fmt" "sort" ) // 对结构体指定字段进行排序 type User struct { Name string `json:"name"` // `json:"xxx"`:在结构体和json字符串字段顺序不一致的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 70,167
精华内容 28,066
关键字:

结构体中的位字段