精华内容
下载资源
问答
  • 结构体

    2021-05-13 14:20:10
    4.结构体里面也可以用结构体,结构体定义完了以后可以随意使用,它的地位和基本类型一样 5.如何访问结构体成员? ①访问结构体普通变量通过"."访问其成员 ②访问结构体指针变量通过"->"访问其成员,指向符自带解...
    1.todo:什么是空间复杂度:
    实现算法需要的额外辅助空间和问题规模之间的函数关系,与运行次数没有关系
    如何计算空间复杂度:
    ①函数的形参不计算(因为每次执行函数都需要形参,并不是额外的辅助空间)
    ②常数的空间复杂度为O(1)
    ③递归的空间复杂度高(递归不到最后的时候,递归前面的函数不能出栈)
    ④并不是所有函数的空间复杂度都为(O(1)),如:筛选法求素数
    2.自定义数据类型:也称为结构体
    struct 类型名
    {
    结构体成员
    };//注意分号
    3.Tab键,自动补齐剩余单词
    4.结构体里面也可以用结构体,结构体定义完了以后可以随意使用,它的地位和基本类型一样
    5.如何访问结构体成员?
    ①访问结构体普通变量通过"."访问其成员
    ②访问结构体指针变量通过"->"访问其成员,指向符自带解引用
    6.有两个符号自带解引用:[] 和 ->
    7.结构体作为参数传递时,总是传递它的地址(更节约空间,传递实参也是需要时间的,实参越大,时间越长),而不传递结构体本身,因为每一个结构体都是很庞大的,字节数也是巨大的,所以实参不会传结构体而是传指针
    8.typedef(type define定义类型)
    定义:typedef 旧类型名 新类型名
    应用:
    ①将复杂的类型起一个简短的别名
    ②将已有的类型起一个和问题相关的名字,例如size_t,time_t(工作中常用)
    9.两种形式等同
    struct A
    {
    	int a;
    	char b;
    };
    typedef struct A A;
    //等同于
    typedef struct A
    {
    	int a;
    	char b;
    }A;
    
    10.通过typedef给一个很长的类型名起一个别名
    uint64:u代表unsigned,int是整型,64代表64个位,也就是8个字节
    //typedef 旧类型名 新类型名;
    typedef unsigned long long int uint64;//u代表unsigned,int是整型,
    //64代表64个位,也就是8个字节
    
    int main()
    {
    	unsigned long long int a = 10;
    	uint64 b = 20;//别名
    	printf("%d\n",b);
    	return 0;
    }
    
    11.通过Show输出Student数组arr的所有内容
    注意:数组arr每一个下标代表一个大格子,一个大格子不一定只有一个数据
    struct Student//自定义学生结构体
    {
    	char name[20];
    	int age;
    };
    
    //通过Show输出Student数组arr的所有内容
    void Show(const struct Student *p,int len)
    {
    	for(int i = 0;i<len;i++)
    	{
    		printf("%s,%d\n",p[i].name,p[i].age);
    		//printf("%s,%d\n",p->name,p->age);
    		//p++;
    	}
    }
    
    int main()
    {
    	struct Student arr[3] = {"刘备",28,"曹操",26,"孙权",20};
    	//把刘备的age改为30
    	arr[0].age = 30;//下标0这个格子的age修改为30
    	printf("%d\n",arr[0].age);
    	//通过指针将age改为35
    	struct Student *ps = &arr[0];
    	ps->age = 35;
    	printf("%d\n",arr[0].age);
    	Show(arr,sizeof(arr)/sizeof(arr[0]));
    
    	return 0;
    }
    
    12.哪一种形式传参更好
    结论:传结构体地址更好一些,因为传递实参也是需要时间的,实参越大,需要的时间越长,传一个int地址只需要4个字节,而传一个结构体则需要很长的时间
    struct Student//自定义学生结构体
    {
    	char name[20];
    	int age;
    };
    
    void Show(struct Student stu)//设计不好,结构体是很庞大的,字节数也是巨大的,所以实参不会传结构体而是传指针
    {//结构体普通变量通过.访问其成员
    	printf("%s,%d",stu.name,stu.age);
    }
    
    void Show(const struct Student *ps)//更好一些,因为传递实参也是需要时间的,传一个int地址只需要4个字节
    {//结构体指针变量通过->访问其成员
    	printf("%s,%d",ps->name,ps->age);
    }
    
    int main()
    {
    	struct Student stu1 = {"liebei",28};
    
    	return 0;
    }
    
    13.通过变量访问其结构体成员
    struct A
    {
    	int a;
    	int *b;
    };
    
    struct B
    {
    	float c;
    	struct A d;
    };
    
    int main()
    {
    	struct B bb;
    	struct B *pb;
    	//要用什么符号只与"我"有关
    	//通过bb访问其成员a,b,c    bb是一个变量,要用.访问
    	bb.d.a;
    	bb.d.b;
    	bb.c;
    	//通过pb访问其成员a,b,c   pb是一个指针,要用->访问
    	pb->d.a;
    	pb->d.b;
    	pb->c;
    	return 0;
    }
    
    14.
    注意:①字符串不能直接赋值,需要使用字符串拷贝函数
    ②定义结构体只有在执行完最后的";"以后才算定义完
    struct Student//自定义学生结构体
    {
    	char name[20];
    	int age;
    };//定义完成后,其作用和基本类型完全一致
    
    struct B
    {
    	//struct B f;//error 因为在下一行才定义完成
    	struct B *g;//ok  自己包含自己的指针是可以的
    };//执行到这里才定义完成
    
    int main()
    {
    	//如何使用结构体
    	struct Student stu1;
    	struct Student stu2 = {"liubei",30};
    
    	//1.将stu2的age改为28岁,如何做?
    	stu2.age = 28;
    	//输入stu2的信息
    	printf("%s,%d\n",stu2.name,stu2.age);
    	//2.把stu1改为曹操,25岁,如何做?
    	//stu1.name = "caocao";//字符串不能赋值,error,重点
    	strcpy(stu1.name,"caocao");
    	stu1.age = 25;
    	//输出stu1的信息
    	printf("%s,%d\n",stu1.name,stu1.age);
    
    	struct Student *ps = &stu1;
    	//通过ps将其age修改为26
    	//(*ps).age = 26;//结构体成员运算符.的优先级大于指针*的优先级
    	ps->age = 26;//ok,常用,->自带解引用
    	printf("%d\n",(*ps).age);
    
    	return 0;
    }
    
    展开全文
  • 结构体里面套结构体数组的使用

    千次阅读 2014-05-27 23:39:42
    比如我定义一个结构体里面装着结构体数组: type struct { int a; int b; }ATTR; type struct { ATTR *pAttr; }USER; 下面是调用的两种方法: int main() { ...

    开始用的时候被这块整蒙了疑问,程序一直不通过,后来问了老大终于弄懂,拿出来和大家共同交流大笑


    比如我定义一个结构体里面装着结构体数组:

    type struct

    {

    int  a;

    int b;

    }ATTR;


    type struct

    {

    ATTR *pAttr;

    }USER;


    下面是调用的两种方法:

    int main()

    {

    USER *pUser = (USER*)malloc(sizeof(USER));

    pUser->pAttr = malloc(sizeof(ATTR)*10);//假定数组里面有10个元素

    int i=0;

    for(;i<10;i++)

    {

    pUser->pAttr[i].a = i;

    pUser->pAttr[i].b = i*10;

    }


    **********************************另一种使用方法****************************************

    ATTR *p = pUser->pAttr;

    for(;i<10;i++)

    {

    printf("a=%d,b=%d\n",f->a,f->b);

    f++;

    }

    }

    微笑最后是一句我喜欢的话:像傻B一样的坚持,总会看到牛B的结果。

       转载请注明出处:http://blog.csdn.net/u010484477     O(∩_∩)O谢谢


    展开全文
  • U-boot中的gd结构体

    2014-05-26 19:35:55
    U-boot中有一个用来保存很多有用信息的全局结构体--gd_t(global data缩写),其中包括了bd变量,可以说gd_t结构体包括了u-boot中所有重要全局变量。 对于ARM平台这个结构体的定义大致如下: include/asm-arm...

    U-boot中有一个用来保存很多有用信息的全局结构体--gd_t(global data缩写),其中包括了bd变量,可以说gd_t结构体包括了u-boot中所有重要全局变量。
    对于ARM平台这个结构体的定义大致如下:
    include/asm-arm/global_data.h
    typedef
    struct
    global_data {

    bd_t
    *bd;

    unsigned long
    flags;

    unsigned long
    baudrate;

    unsigned long
    have_console;
    /* serial_init() was called */

    unsigned long
    reloc_off;
    /* Relocation Offset */

    unsigned long
    env_addr;
    /* Address
    of Environment struct */

    unsigned long
    env_valid;
    /* Checksum of Environment valid? */

    unsigned long
    fb_base;
    /* base address of frame buffer */

    void
    **jt;
    /* jump table */
    } gd_t;

    在U-boot中使用gd结构之前要用先用宏DECLARE_GLOBAL_DATA_PTR来声明。这个宏的定义如下:
    include/asm-arm/global_data.h
    #define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("r8")

    从这个宏的定义可以看出,gd是一个保存在ARM的r8寄存器中的gd_t结构体的指针。


    对于Linux Kernel,在使用U-boot传递来的gd中的bd时用的是arm_bd,因为:

    在arch/arm/kernel/setup.c文件中:
    void __init setup_arch(char **cmdline_p)
    {
    ……

    struct tag *tags = (struct tag *)&init_tags;

    struct machine_desc *mdesc;

    char *from = default_command_line;

    void *bd_offset = NULL;
    ……

    save_bd(bd_offset);
    ……
    }

    save_bd():
    void __init save_bd(void* addr)
    {

    memcpy((char *)__res,
    (char *)addr,
    sizeof(bd_t));

    arm_bd = (bd_t *)__res;
    }

    展开全文
  • u-boot中结构体详解

    2009-05-16 13:22:00
    uboot结构体详解,很不错的分析!!!!!!!!!!!!!!!!!!!!!!!!!
  • 结构体定义的冒号

    2013-10-10 20:23:07
    定义结构体时变量名后的冒号和数字 如下:  [cpp] view plaincopy struct frame_control {   u_char fc_subtype : 4;   u_char fc_type : 2;   u_char ...
     

    定义结构体时变量名后的冒号和数字

    如下:    

    [cpp]  view plain copy
    1. struct frame_control {  
    2.     u_char fc_subtype : 4;  
    3.     u_char fc_type : 2;  
    4.     u_char fc_protocol_version : 2;  
    5.     u_char fc_order : 1;  
    6.     u_char fc_wep : 1;  
    7.     u_char fc_more_data : 1;  
    8.     u_char fc_pwr_mgt : 1;  
    9.     u_char fc_retry : 1;  
    10.     u_char fc_more_frag : 1;  
    11.     u_char fc_from_ds : 1;  
    12.     u_char fc_to_ds : 1;  
    13. };  
    这是位域操作的表示方法,也就是说后面加上“:1”的意思是这个成员的大小占所定义类型的1 bit,

    “:2”占2 bit,依次类推。当然大小不能超过所定义类型包含的总bit数。

    一个bytes(字节)是8 bit(bit)。例如你的结构中定义的类型是u_char,一个字节,共8bit,最大就不能超过8。
    32位机下,short是2字节,共16bit,最大就不能超过16。int是4字节,共32bit,最大就不能超过32。依次类推。

    这样定义比较省空间。例如上面的结构,定义的变量类型是u_char,是一字节类型,即8bit。
    fc_subtype占了4bit,fc_type占2bit,fc_protocol_version占2bit,共8bit,正好是一个字节。
    其他八个成员,各占1bit,共8bit,正好也是一个字节。
    因此结构的大小如果用sizeof(struct frame_control)计算,就是2bytes.

    展开全文
  • 结构体指针

    2019-09-26 11:10:46
    结构体指针分为两类 一类是指向结构体变量的指针,一类是指向结构体数组的指针 指向结构体变量的指针 前面我们通过“结构体变量名.成员名”的方式引用结构体变量中的成员,除了这种方法之外还可以使用指针。 前面...
  • 我们聊过了函数、指针、数组混搭结果:指针数组 数组指针 指针函数 函数指针 函数指针数组。本文主要讲述在工程中我们常用的结构体数组,主要应用场景,IF初始化等集成度比较的复用函数接口。
  • C语言结构体

    2021-02-01 16:00:58
    结构体结构体概述从数组到结构体的进步之处结构体中的元素如何访问结构体的对齐访问结构体为何要对齐访问结构体对齐的规则运算GCC的对齐指令offsetof宏与container_of宏(重要)灵活的使用结构体1灵活的使用结构体2 ...
  • 结构体相关

    2017-07-17 20:35:32
    1.结构体初始函数格式:
  • Go结构体

    2020-12-13 19:56:37
    本文仅是自己阅读笔记,不正确之处请多包涵...结构体的字段可以是任何类型,甚至是结构体本身,也可以是函数或者接口。 1、使用 new与使用var声明结构体的区别 使用 new 函数给一个新的结构体变量分配内存,它返回指向
  • 09-30一维数组结构体数组结构体数组,通过改变指针类型改变访问数组的方式toto129748850424332014-08-01mfc结构体指针、结构体数组指针u01399024812292014-12-14memset结构体初始化shagua_nan184092016-03-16【C++ -...
  • 结构体对齐

    2018-08-07 17:18:23
    struct BPB16 { u16 BPB_BytsPerSec; //每扇区字节数 u8 BPB_SecPerClus; //每簇扇区数 u16 BPB_RsvdSecCnt; //DBR保留的扇区数 u8 BPB_NumFATs; //FAT表个数 u16 BPB_Unused1; //F...
  • 把函数名隐藏在结构体里,以函数指针成员的形式存储 &amp;gt;* KNUtil.h @interface KNUtil : NSObject /** 把函数名隐藏在结构体里,以函数指针成员的形式存储。 编译后,只留了下地址,去掉了名字和参数表,...
  • 结构体边界对齐问题

    2019-11-19 11:35:32
    结构体边界对齐问题 在构造DNS应答包的Answer字段时,我定义了一... __u16 name; __u16 type; __u16 class; __u32 ttl; __u16 length; __u32 ipv4_addr; }DNS_ANSWER_DATA; 但是在进行数据包的构造的时候,在...
  • Linux file 结构体和 inode 结构体

    千次阅读 2018-02-27 11:06:11
    在设备驱动程序中,一般需要关心两个结构体:file 和 inode。1. file 结构体file 结构体代表一个打开的文件,系统中每个打开的文件在内核空间都有一个关联的 struct file。它由内核在打开文件时创建,并传递给在文件...
  • c++结构体

    2015-04-05 23:20:59
    结构体——可以包含不同数据类型的自定义数据类型。 结构体的定义用struct作修饰 struct demo { char ch; int num; }; 结构体本身是一种数据类型,因此结构体变量的定义与普通变量的定义一样 demo test...
  • c结构体

    2015-01-23 16:14:00
    结构体是一种新的数据类型 1 struct student{ 2 int ID; 3 char name; 4 }; //声明一个结构体,student只是结构体的一个标签,在一个程序中可能有多个结构体 5 struct student stu1 //用结构体来声明一个变量...
  • 008-结构体

    2021-06-01 18:08:44
    结构体 定义结构体 创建结构体实例 修改结构体字段 参数名字和字段名字同名的简写方法 从其他结构体创建实例 元组结构体 没有任何字段的类单元结构体 ... nonce: u64, _active: bool, //active 关键字 }
  • 善于结构体

    2017-01-09 22:35:16
    处于专业课程设计的考虑,深深受到一些伤害,体会到结构体多少还是有些好处,对内存的开销会更少。虽然现在对它的使用不过熟悉,不过也是要好好去加深理解结构体的使用。转载至:...
  • file结构体

    2018-03-10 17:22:42
     struct file结构体定义在include/linux/fs.h中定义。文件结构体代表一个打开的文件,系统中的每个打开的文件在内核空间都有一个关联的 struct file。它由内核在打开文件时创建,并传递给在文件上进行操作的任何...
  • 请移步原文https://blog.csdn.net/u013632190/article/details/47720703 一、使用typedef定义结构体 typedef用来定义新的数据类型,通常typedef与结构体的定义配合使用。使用typedef的目的使结构体的表达更加简练...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 99,460
精华内容 39,784
关键字:

结构体里u16