结构体类型

指针数组和结构体指针

。_饼干妹妹 提交于 2019-12-01 08:30:33
1.指针数组 1)关于指针数组 一个数组,里面存储的是指针(也就是带*的类型) 指针数组: char* arr[5] = {0}; //用0填充数组 arr[0] = (char*)1; arr[1] = (char*)2; arr[2] = (char*)3; arr[3] = (char*)4; arr[4] = (char*)5; char a1 = 'A'; char a2 = 'B'; char a3 = 'C'; char a4 = 'D'; char a5 = 'E'; char* p1 = &a1; char* p2 = &a2; char* p3 = &a3; char* p4 = &a4; char* p5 = &a5; char* arr[5] = {p1,p2,p3,p4,p5}; 指针数组在内存中存储的方式: 2)指针数组的用法 1】字符串放在常量区,常量区的字符串地址存入指针数组 char* p1 = "if"; char* p2 = "for"; char* p3 = "while"; char* p4 = "switch"; char* keyword[] = {p1,p2,p3,p4}; 2】和上一种方式的效果一样,实际上指针数组存放的是常量区字符串的地址; char* keyword[] = { "if", "for", "while",

Linux内核链表

大城市里の小女人 提交于 2019-12-01 07:18:06
大多数人在学习数据结构的时候,链表都是第一个接触的内容,笔者也不列外,虽然自己实现过几种链表,但是在实际工作中,还是Linux内核的链表最为常用(同时笔者也建议大家使用内核链表,因为会了这个,其他的都会了),故总结一篇Linux内核链表的文章。 阅读本文之前,我假设你已经具备基本的链表编写经验。 内核链表的结构是个双向循环链表,只有指针域,数据域根据使用链表的人的具体需求而定。内核链表设计哲学: 既然链表不能包含万事万物,那么就让万事万物来包含链表。 假设以如下方式组织我们的数据结构: 创建一个结构体,并将链表放在结构体第一个成员地址处(后面会分析不在首地址时的情况)。 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 #include "list.h" 5 6 struct person 7 { 8 struct list_head list; 9 int age; 10 }; 11 12 int main(int argc,char **argv) 13 { 14 int i; 15 struct person *p; 16 struct person person1; 17 struct list_head *pos; 18 19 INIT_LIST_HEAD(&person1.list); 20 21 for (i = 0;i <

c语言-----结构体

本秂侑毒 提交于 2019-12-01 06:56:42
结构体:一个用同一名字引用的变量集合体,提供了将相关信息组合在一起的手段。 一:结构体变量的定义及初始化 ①定义: (1)在定义结构体类型后再定义结构体变量 struct student { char name[10];//成员项 int score[3]; float aver; };struct sutdent stu1,stu2//在定义结构体类型后再定义结构体变量 (2)定义结构体类型同时定义结构体变量 struct student { char name[10];//成员项 int score[3]; float aver; }stu1,stu2; (2)直接定义结构体变量 struct { char name[10];//成员项 int score[3]; float aver; }stu1,stu2; ②初始化 struct student { char name[10];//成员项 int score[3]; float aver; }; struct sutdent stu1={"changfan",{100,98,99},99},stu2={"luzhu",{100,100,100},100} 二:结构体变量的使用 ①结构体成员的使用 #include<stdio.h> #include<string.h> //声明结构体类型 struct student{

网络驱动之net_device结构体

房东的猫 提交于 2019-12-01 04:35:19
在Linux系统中,网络设备都被抽象为struct net_device结构体。它是网络设备硬件与上层协议之间联系的接口,了解它对编写网络驱动程序非常有益,所以本文将着手简要介绍linux-2.6.38.8/include/linux/netdevice.h文件中struct net_device结构体的所有成员(没有按照它们定义的顺序)。 1、网络设备相关信息 (1)、设备名 char name[IFNAMSIZ]; char *ifalias; //用于SNMP协议 在Linux系统中,每个网络设备都有一个唯一的设备名(如eth0,字母部分代表网络设备的类型,数字部分代表此类网络设备的数量)。 (2)、电源管理服务质量( power managementQuality Of Service) struct pm_qos_request_list pm_qos_req; 用于Wi-Fi和千兆以太网,可以帮助控制网络的延迟和带宽的需求,以达到在可用的前提下省电的目的。 (3)、硬件信息 //网络设备内存映射时在主机中的内存区域 unsigned long mem_end; unsigned long mem_start; //网络设备I/O基地址 unsigned long base_addr; //中断号 unsigned int irq; //传输介质,如双绞线、同轴电缆等

位域-isa指针

白昼怎懂夜的黑 提交于 2019-11-30 21:43:42
一、isa指针结构 union isa_t { isa_t() { } isa_t(uintptr_t value) : bits(value) { } Class cls; uintptr_t bits; #if SUPPORT_PACKED_ISA // extra_rc must be the MSB-most field (so it matches carry/overflow flags) // nonpointer must be the LSB (fixme or get rid of it) // shiftcls must occupy the same bits that a real class pointer would // bits + RC_ONE is equivalent to extra_rc + 1 // RC_HALF is the high bit of extra_rc (i.e. half of its range) // future expansion: // uintptr_t fast_rr : 1; // no r/r overrides // uintptr_t lock : 2; // lock for atomic property, @synch // uintptr_t extraBytes : 1; //

stm32学习笔记——串口通信

醉酒当歌 提交于 2019-11-30 18:17:18
stm32 学习笔记——串口通信 目的:利用串口收发数据 配置文件: #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #include "stm32f10x_usart.h" 寄存器: USART_SR :状态寄存器,第 5 位 RXNE ,收到数据可以读出时置 1 ,第 6 位 TC , 发送完成时置 1 ,第 7 位 TXE ,数据移至移位寄存器置 1 。 USART_DR :数据寄存器,高 23 位保留,低 9 位接收数据,分为发送寄存器 TDR , 和接受寄存器 RDR UASRT_BRR :波特率寄存器,高 16 位保留, 0-3 位波特率整数部分, 4-15 位波特 率小数部分。 USART_CR1 :控制寄存器,第 2 位 RE 接收使能,第 3 位 TE 发送使能,第 9 位 PS ,奇偶校验位,奇校验置 1 ,第 10 位 PCE ,校验控制使能,位 12 字长位,一个 起始位, 8 个数据位,一个停止位置 1 , n 个停止位置 0 。位 13UEUSART 使能。 结构体定义: USART 寄存器结构体 typedef struct { __IO uint16_t SR; uint16_t RESERVED0; __IO uint16_t DR; uint16_t RESERVED1; __IO

C语言知识点总结篇

白昼怎懂夜的黑 提交于 2019-11-30 15:48:04
Debug和Release版本比较 Debug附加了许多调试信息,主要用于调试,故文件大; Release是经过优化后的版本,去掉了调试信息,代码进行了优化,故文件较小,且编译速度快过Debug,用于发布平台的配置管理器的设置; 32位与64位 32位,地址为32位,最大使用内存4G,只能运行32位的数据; 64位,地址为64位,既可以运行32位的数据,也可以运行64位的数据; 指针 指针是个量,对应一块内存区域; 指针存储的是某个内存单元的地址; 访问方式: 1、直接访问:按变量地址存取变量值,取地址符&; 2、间接访问:通过存放变量地址的变量去访问变量,间接运算符*; 在函数中改变一个外部变量,需要变量的地址; 若是数据,需要指向数据的指针存储数据的地址; 若是指针,需要指向指针的指针存用户指针的地址; 数组与指针 p[i]等价于*(p+i),&p[i]等价于p+i; a[i][j]等价于*(*(a+i)+j),&a[i][j]等价于*(a+i)+j, a[i]等价于*(a+i); 行数组指针定义方法:数据类型(*指针变量名)[二维数组列数]; 二维数组地址不可变化,数据可以变化,可以在不修改地址的情况下管理数据,指针数组指向的数据不可变化,但地址可以变化,在不修改数据的情况下查看数据; 三维数组与指针,A[i][j][k]的三种表达形式:*(A[i][j]+k)、*(*(A

C语言中内存对齐与结构体

帅比萌擦擦* 提交于 2019-11-30 06:34:47
结构体 结构体是一种新的数据类型,对C语言的数据类型进行了极大的扩充。 struct STU{ int age; char name[15]; }; struct STU a; //结构体实例 struct STU *b; //结构体指针 1、可以通过a.age对其进行取成员的操作,b->age也可以进行结构体的操作,b->age存在问题,必须有一个结构体空间已经让b指向,b的值为此结构体空间的地址。 2、a.name = "lilei"; false,因为name是数组名称,指针常量不能赋值,解决方案:strcpy()函数 3、字符串直接进行比较的话,是其地址的比较,没有什么意义,用strcmp()函数进行比较,就是ASCII码的比较了。 内存对齐 操作系统对于内存空间的分配,遵循如下原则:总是从2^n倍数为地址的字节处开始分配空间。 如:若按4B对其模式的话,则每个变量(结构体成员)的首地址总是从编号为4的整数倍的字节处开始分配空间。 可设几字节对齐如下 #pragma pack(push) //保持原对齐格式 #pragma pack(1) //设定为n字节格式 ....... #pragma pack(pop) //恢复为原对齐格式 1、结构体大小 (1)、总大小是下一个类型的整数倍,否则用单字节补齐(单字节最多补到4/8,具体看结构体中最宽几字节) /

链表&状态机与多线程

一个人想着一个人 提交于 2019-11-30 06:13:46
《C语言高级专题第9部分-4.9.链表&状态机与多线程》 第一部分、章节目录 4.9.1.链表的引入 4.9.2.单链表的实现 4.9.3.单链表的算法之插入节点 4.9.4.单链表的算法之插入节点续 4.9.5.从链表头部插入新节点 4.9.6.单链表的算法之遍历节点 4.9.7.单链表的算法之删除节点 4.9.8.单链表的算法之逆序 4.9.9.双链表的引入和基本实现 4.9.10.双链表的算法之插入节点 4.9.11.双链表的算法之遍历节点 4.9.12.双链表的算法之删除节点 4.9.13.linux内核链表 4.9.14.内核链表的基本算法和使用简介 4.9.15.什么是状态机 4.9.16.C语言实现简单的状态机 4.9.17.多线程简介 第二部分、章节介绍 4.9.1.链表的引入 本节从数组的缺陷说起引入链表的概念,目的是让大家自然认识到链表的意义和用途。 4.9.2.单链表的实现 本节介绍单链表的思路和编程实现,重点是链表节点的封装和实现。 4.9.3.单链表的算法之插入节点 本节讲述单链表操作的第一个算法,节点插入。主要介绍了头部插入和尾部插入这两种不同算法。 4.9.4.单链表的算法之插入节点续 本节为链表尾部插入的编程实践,带大家写代码实现从尾部插入节点。 4.9.5.从链表头部插入新节点 本节为链表头部插入的编程实践,带大家写代码实现从头部插入节点。 4.9

C/C++ 笔记、Python 笔记、JavaWeb + 大数据 笔记

▼魔方 西西 提交于 2019-11-30 05:46:44
Keras、PyTorch、MXNet 用户画像 C、C++笔记 JavaWeb+大数据笔记 CDH 6、CDH5 Python笔记 https://pan.baidu.com/s/1OBd1rbwGx0F8YnefM7R0Uw 提取码0hal https://pan.baidu.com/s/1TKNZ6TtDxDtDUnezrcXJ8Q 提取码2ber https://pan.baidu.com/s/1_XWMwcoNuDPdE3xkluo08A 提取码b12m https://pan.baidu.com/s/1eW8YSrasGiTXpBFSSJd78Q 提取码7aeu https://pan.baidu.com/s/1xi_3T6Nw__Sy-QQaN29O4Q 提取码1gcs 1.CDH 6 的安装和使用 、CDH5安装 https://blog.csdn.net/zimiao552147572/article/details/87190368 https://blog.csdn.net/zimiao552147572/article/details/94158217 2.用户画像 https://blog.csdn.net/zimiao552147572/article/details/88425850 3.Spark 实时处理 https://blog.csdn.net