函数指针

Golang 入门 : 数组

柔情痞子 提交于 2020-03-16 03:06:46
数组是指一系列同一类型数据的集合。数组中包含的每个数据被称为数组元素(element),这种类型可以是任意的原始类型,比如 int、string 等,也可以是用户自定义的类型。一个数组包含的元素个数被称为数组的长度。在 Golang 中数组是一个长度固定的数据类型,数组的长度是类型的一部分,也就是说 [5]int 和 [10]int 是两个不同的类型。Golang 中数组的另一个特点是占用内存的连续性,也就是说数组中的元素是被分配到连续的内存地址中的,因而索引数组元素的速度非常快。 本文将介绍 Golang 数组的基本概念和用法,演示环境为 ubuntu 18.04 & go1.10.1。 Golang 数组的特点 我们可以把 Golang 数组的特征归纳为以下三点: 固定长度 :这意味着数组不可增长、不可缩减。想要扩展数组,只能创建新数组,将原数组的元素复制到新数组。 内存连续 :这意味可以在缓存中保留的时间更长,搜索速度更快,是一种非常高效的数据结构,同时还意味着可以通过数值的方式(arr[index])索引数组中的元素。 固定类型 :固定类型意味着限制了每个数组元素可以存放什么样的数据,以及每个元素可以存放多少字节的数据。 数组是个固定长度的数据类型,其长度和存储元素的数据类型都在声明数组时确定,并且不能更改。如果需要存储更多的元素,必须先创建一个更长的数组

C语言描述链表的实现及操作

点点圈 提交于 2020-03-11 17:05:39
一.链表的创建操作 // 操作系统 win 8.1 // 编译环境 Visual Stuido 2017 #include<stdio.h> #include<malloc.h> #include<stdlib.h> typedef int ElementType; // 定义数据类型,可根据需要进行其他类型定义 // 链表节点的定义 typedef struct ListNode { ElementType Element; // 数据域,存放数据 ListNode* Next; // 指向下一个链表节点 }Node, *PNode; // 链表创建函数定义 PNode CreateList(void) { int len ; // 用于定义链表长度 int val ; // 用于存放节点数值 PNode PHead = (PNode)malloc(sizeof(Node)); // 创建分配一个头节点内存空间//头节点相当于链表的哨兵,不存放数据,指向首节点(第一个节点) if (PHead == NULL) // 判断是否分配成功 { printf("空间分配失败 \n"); exit(-1); } PNode PTail = PHead; // 链表的末尾节点,初始指向头节点 PTail->Next = NULL; // 最后一个节点指针置为空 printf(

打开一个文件操作系统做了什么?

情到浓时终转凉″ 提交于 2020-03-10 15:28:00
当我们打开一个文件时,主要涉及了进程,文件描述符,文件描述表,打开文件表,目录项,索引表之间的联系。 今天主要围绕这几个图来说 第一进程控制块PCB与文件描述符的关系 在进程控制块维护一个指向files-structure的结构体(可以看作是一个指向file结构体的指针数组 *file[n]),而所谓的文件描述符就是这个表的索引(就是数组的下标),表中存储的是一个指针(数组的类型),指向files结构体。 file结构体—文件控制块 struct file { union { struct llist_node fu_llist; struct rcu_head fu_rcuhead; } f_u; struct path f_path; #define f_dentry f_path.dentry struct inode *f_inode; /* cached value */ const struct file_operations *f_op; /* * Protects f_ep_links, f_flags. * Must not be taken from IRQ context. */ spinlock_t f_lock; atomic_long_t f_count; unsigned int f_flags; fmode_t f_mode; struct

C++笔记(六)——I/O&异常

荒凉一梦 提交于 2020-03-10 05:16:32
iostream 标准库 提供了 cin 和 cout 方法分别用于从标准输入读取流和向标准输出写入流。 · 标准库 fstream 定义了三个新的数据类型用于文件的访问。 · open() 函数 是 fstream、ifstream 和 ofstream 对象的一个成员。open() 成员函数的 第一参数指定要打开的文件的名称和位置,第二个参数定义文件被打开的模式 。可以把以上两种或两种以上的模式结合使用。 void open ( const char * filename , ios :: openmode mode ) ; //以写入模式打开文件,并希望截断文件,以防文件已存在 ofstream outfile ; outfile . open ( "file.dat" , ios :: out | ios :: trunc ) ; //打开一个文件用于读写 ifstream afile ; afile . open ( "file.dat" , ios :: out | ios :: in ) ; · close() 函数 用于关闭文件(通常应该在程序结束前关闭),close() 函数是 fstream、ifstream 和 ofstream 对象的一个成员。 void close ( ) ; ·使用流插入运算符( << )向文件写入信息,使用的是 ofstream 或

c++构造函数的作用---13

人走茶凉 提交于 2020-03-09 12:25:54
原创博客:转载请标明出处:http://www.cnblogs.com/zxouxuewei/ http://blog.csdn.net/tidyjiang/article/details/52073671 一、 构造函数是干什么的 class Counter { public: // 类Counter的构造函数 // 特点:以类名作为函数名,无返回类型 Counter() { m_value = 0; } private: // 数据成员 int m_value; } 该类对象被创建时,编译系统对象分配内存空间, 并自动调用该构造函数->由构造函数完成成员的初始化工作 eg: Counter c1; 编译系统为对象c1的每个数据成员(m_value)分配内存空间,并调用构造函数Counter( )自动地初始化对象c1的m_value值设置为0 故: 构造函数的作用:初始化对象的数据成员。 二、 构造函数的种类 class Complex { private : double m_real; double m_imag; public: // 无参数构造函数 // 如果创建一个类你没有写任何构造函数,则系统会自动生成默认的无参构造函数,函数为空,什么都不做 // 只要你写了一个下面的某一种构造函数,系统就不会再自动生成这样一个默认的构造函数,如果希望有一个这样的无参构造函数

c++中各类型数据所占字节数(二)

这一生的挚爱 提交于 2020-03-09 10:45:59
转自: https://blog.csdn.net/allen_tony/article/details/76973906 https://blog.csdn.net/zzwdkxx/article/details/53635173 关于多个父类,虚继承,类本身自己的虚函数,情况比较复杂,后续时间再研究。 类所占内存的大小是由成员变量(静态变量除外)决定的,成员函数是不计算在内的。摘抄部分: 成员函数还是以一般的函数一样的存在。a.fun()是通过fun(a.this)来调用的。所谓成员函数只是在名义上是类里的。其实成员函数的大小不在类的对象里面,同一个类的多个对象共享函数代码。而我们访问成员函数是通过类里面的一个指针实现,而这个指针指向的是一个table,table里面记录的各个成员函数的地址(当然不同的编译可能略有不同的实现)。所以我们访问成员函数是间接获得地址的。所以这样也就增加了一定的时间开销,这也就是为什么我们提倡把一些简短的,调用频率高的函数声明为inline形式(内联函数)。 如果类定义了虚函数,该类及其派生类就要生成一张虚拟函数表,即vtable。而在类的对象地址空间中存储一个该虚表的入口,占4个字节,这个入口地址是在构造对象时由编译器写入的。 所以,由于对象的内存空间包含了虚表入口,编译器能够由这个入口找到恰当的虚函数,这个函数的地址不再由数据类型决定了。

你必须知道的指针基础-4.sizeof计算数组长度与strcpy的安全性问题

独自空忆成欢 提交于 2020-03-09 07:23:36
一、使用sizeof计算数组长度 1.1 sizeof的基本使用   如果在作用域内,变量以数组形式声明,则可以使用sizeof求数组大小,下面一段代码展示了如何使用sizeof: int nums[] = {11,22,33,44,55,66}; int i; // sizeof(nums) 计算nums数组的总字节数 // sizeof(int) 计算int类型所占用的字节数 int length = sizeof(nums)/sizeof(int); for(i=0;i<length;i++) { printf("%d ",nums[i]); }   其中sizeof(nums)代表计算nums数组的总字节数,而sizeof(int)则代表计算int类型所占用的字节数(32位系统下是4个字节,64位下可能不同,因此这里使用sizeof(int)可以向程序员屏蔽这个差异),运行结果为: 1.2 sizeof只能在编译时计算   假如我们将上面的代码做一个抽象,将数组的遍历及打印封装为一个方法,代码如下: void printEach(int* nums) { // sizeof(nums)在这里是计算指针的字节数 int length = sizeof(nums)/sizeof(int); printf("The length of nums is %d\n",length);

Linux驱动之USB鼠标驱动编写

主宰稳场 提交于 2020-03-08 07:41:55
本篇博客分以下几部分讲解 1、介绍USB四大描述 2、介绍USB鼠标驱动程序功能及框架 3、介绍程序用到的结构体 4、介绍程序用到的函数 5、编写程序 6、测试程序 1、介绍USB四大描述符 USB设备驱动程序里定义了许多与驱动程序密切相关的描述符。这里介绍一下四种比较关键的描述符: 设备描述符 、 配置描述符 、 接口描述符 、 端点描述符 。这几个描述符都位于include\linux\usb\ch9.h中,先看一下每个描述直接的关系,从图中可以看出每一个查到USB主机上的USB设备都有一个设备描述符,设备描述符下面可以接多个配置描述符,配置描述符下面又可以接多个 当USB设备接到USB控制器上后,USB控制器第一次读取到的数据包,总共8字节 /*当USB设备接到USB控制器上后,USB控制器第一次读取到的数据包,总共8字节*/ struct usb_ctrlrequest { __u8 bRequestType; __u8 bRequest; __le16 wValue; __le16 wIndex; __le16 wLength; } __attribute__ ((packed)); 设备描述符 是在设备连接时,主机第一个读取的描述符,包含了主机需要从设备读取的基本信息。设备描述符有14个字段,如下所示。依照功能来分,设备描述符的字段包含了描述符本身、设备

linux系统进程的内存布局

别来无恙 提交于 2020-03-07 14:13:29
内存管理模块是操作系统的心脏;它对应用程序和系统管理非常重要。今后的几篇文章中,我将着眼于实际的内存问题,但也不避讳其中的技术内幕。由于不少概念是通用的,所以文中大部分例子取自32 位x86 平台的Linux 和Windows 系统。本系列第一篇文章讲述应用程序的内存布局。 在多任务操作系统中的每一个进程都运行在一个属于它自己的内存沙盘中。这个沙盘就是虚拟地址空间(virtual address space ),在32 位模式下它总是一个4GB 的内存地址块。这些虚拟地址通过页表(page table )映射到物理内存,页表由操作系统维护并被处理器引用。每一个进程拥有一套属于它自己的页表,但是还有一个隐情。只要虚拟地址被使能,那么它就会作用于这台机器上运行的所有软件,包括内核本身。因此一部分虚拟地址必须保留给内核使用: 这并不意味着内核使用了那么多的物理内存,仅表示它可支配这么大的地址空间,可根据内核需要,将其映射到物理内存。内核空间在页表中拥有较高的特权级(ring 2 或以下),因此只要用户态的程序试图访问这些页,就会导致一个页错误(page fault )。在Linux 中,内核空间是持续存在的,并且在所有进程中都映射到同样的物理内存。内核代码和数据总是可寻址的,随时准备处理中断和系统调用。与此相反,用户模式地址空间的映射随进程切换的发生而不断变化:

2019春第七周作业

試著忘記壹切 提交于 2020-03-07 09:53:12
这个作业属于哪个课程 C语言程序设计II 这个作业要求在哪里 2019年春季学期第七周作业 我在这个课程的目标是 我希望能够通过学习C语言的知识,编写程序 这个作业在哪个具体方面帮助我实现目标 这个作业让我知道了掌握数组名作为函数参数的用法,理解指针和数组可以实现相同的操作 参考文献 字母大小写转换 , C 结构体 一、本周完成的作业 题目1. 6-2 每个单词的最后一个字母改成大写 (10 分) 函数fun的功能是:将p所指字符串中每个单词的最后一个字母改成大写。(这里的“单词”是指由空格隔开的字符串)。 函数接口定义: void fun( char *p ); 其中 p 是用户传入的参数。函数将 p所指字符串中每个单词的最后一个字母改成大写。 裁判测试程序样例: #include <stdio.h> void fun( char *p ); int main() { char chrstr[64]; int d ; gets(chrstr); d=strlen(chrstr) ; chrstr[d] = ' ' ; chrstr[d+1] = 0 ; fun(chrstr); printf("\nAfter changing: %s\n", chrstr); return 0; } /* 请在这里填写答案 */ 输入样例: my friend is happy 输出样例: