初始化

C语言字符串

本秂侑毒 提交于 2020-03-15 18:00:54
目录 一、字符串的概念 二、占用内存的情况 三、字符串的初始化 四、字符串与指针 五、字符串的结尾标志 六、字符串的输出 七、字符串越界 八、字符串常用的库函数 1、获取字符串的长度(strlen) 2、字符串复制或赋值(strcpy) 3、字符串复制或赋值(strncpy) 4、字符串拼接(strcat) 5、字符串拼接(strncat) 6、字符串比较(strcmp、strncmp) 7、字符查找(strchr、strrchr) 8、字符串查找(strstr) 九、应用经验 1、留有余地 2、变量初始化 3、位置(地址)偏移的用法 4、不要在子函数中对字符指针用sizeof 十、课后作业 十一、版权声明 在很多教程中,字符串不过是一个以0结束的字符数组,但是,在我看来,字符串虽然不是C语言基本数据类型,但它比任何数据类型都重要,因为字符串是最常用的数据。 一、字符串的概念 我们可以把字符串储存在char类型的数组中,如果char类型的数组末尾包含一个表示字符串末尾的空字符\0,则该数组中的内容就构成了一个字符串。 因为字符串需要用\0结尾,所以在定义字符串的时候,字符数组的长度要预留多一个字节用来存放\0,\0就是数字0。这是约定。 char strname[21]; // 定义一个最多存放20个英文字符或十个中文的字符串 字符串也可以存放中文和全角的标点符号

java 对象的初始化过程

▼魔方 西西 提交于 2020-03-15 17:19:15
类Person: public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } } Person p = new Person("zhangsan",20); 这句话做了什么事情? 1.因为new用到了Person.class,所以会先找到Person.class文件并加载到内存中。 2.执行该类中的静态代码块,如果有的话,给Person.class类进行初始化。 3.在堆内存中开辟空间,分配内存地址 4.在堆内存中建立对象的特有属性,并进行默认初始化。 默认初始化:   默认初始化是系统在堆内存创建一个新的对象时,进行的默认初始化,如null 和0 5.对属性进行显示初始化。 显示初始化:   显示初始化是在类定义时,直接在各个成员变量的定义时,优先进行赋值,这叫显示初始化。 6.对对象进行构造代码块初始化。 7.对对象进行对应的构造函数初始化。 8.将内存地址赋给栈内存中的p变量 来源: https://www.cnblogs.com/hongxiao2020/p/12497488.html

Java语言基础02

早过忘川 提交于 2020-03-15 12:36:56
语言基础·二级 顺序结构语句 * A:什么是流程控制语句 * 流程控制语句:可以控制程序的执行流程。 * B:流程控制语句的分类 * 顺序结构 * 选择结构 * 循环结构 * C:执行流程: * 从上往下,依次执行。 * D:案例演示 * 输出几句话看效果即可 选择结构if语句格式 * A:选择结构的分类 * if语句 * switch语句 * B:if语句有几种格式 * 格式1 * 格式2 * 格式3 * C:if语句的格式1 * if(比较表达式) { 语句体; } * D:执行流程: * 先计算比较表达式的值,看其返回值是true还是false。 * 如果是true,就执行语句体; * 如果是false,就不执行语句体; * A:if语句的格式2 * if(比较表达式) { 语句体1; }else { 语句体2; } * B:执行流程: * 首先计算比较表达式的值,看其返回值是true还是false。 * 如果是true,就执行语句体1; * 如果是false,就执行语句体2; * C:案例演示 * a:获取两个数据中较大的值 * b:判断一个数据是奇数还是偶数,并输出是奇数还是偶数 * 注意事项:else后面是没有比较表达式的,只有if后面有。 * A:if语句的格式3: * if(比较表达式1) { 语句体1; }else if(比较表达式2) { 语句体2; }else

拷贝、赋值与销毁

我只是一个虾纸丫 提交于 2020-03-15 12:21:09
一个类的拷贝控制操作包含: 拷贝构造函数 拷贝赋值运算符 移动构造函数 移动赋值运算符 析构函数 其中: 拷贝和移动构造函数定义了当用同类型的另一个对象初始化本对象时的操作。 拷贝和移动赋值运算符定义了将一个对象赋予同类型的另一个对象时的操作。 析构函数定义了当此类型对象销毁时的操作。 如果一个类没有定义所有这些拷贝控制成员,编译器会自动为它定义缺省的操作。对一些类来说,依赖于这些操作的默认定义会导致灾难。 拷贝构造函数 如果一个构造函数的第一个参数是自身类型的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数: class Foo{ public: Foo(); //默认构造函数 Foo(const Foo&); //拷贝构造函数 }; 拷贝构造函数的第一个参数必须是引用类型。 虽然可以定义一个接受非 const 引用的拷贝构造函数,但是此参数几乎总是 const 的。 拷贝构造函数在一些情况下会隐式使用,因此拷贝构造函数通常不定义成 explicit 。 合成拷贝构造函数 如果没有自定义拷贝构造函数,编译器会自动生成一个,与合成默认构造函数不同,即使定义了其他构造函数,编译器也会合成一个拷贝构造函数。 一般情况,合成的拷贝构造函数会从给定对象中依次将每个非 static 成员拷贝到正在创建的对象中,每个成员的类型决定了如何拷贝: 对类类型的成员

点读系列《Java编程思想 前6章》

好久不见. 提交于 2020-03-15 09:50:21
第1章 对象导论 计算机是头脑延伸的工具。 所有编程语言都提供抽象机制。 每个对象看起来都有点像一台微型计算机。 每个对象在内存中都有一个唯一的地址。 每个对象都有一个接口。 向对象发送消息。 每个对象都提供服务。 每个对象都可以很好地完成一项任务,但是它并不试图做更多的事。 public 任何人都是可用的。 private 除类型创建者和类型的内部方法之外的任何人都不能访问。 protected 与private作用相当,差别仅在于继承的类可以访问protected成员。 Java的默认访问权限:包访问权限,类可以访问在同一个包中的其他类的成员。 代码复用是面向对象程序设计语言所提供的最了不起的优点之一,复用某个类的最简单方式就是直接使用该类的一个对象。 在建立新类时,应该首先考虑组合(将一个类的对象置于新类中),而不是盲目的继承。 类与基类具有相同的类型。 通过继承而产生的类型等价性是理解面向对象程序设计方法内涵的重要门槛。 Java以extends关键字表示继承。 把一个对象不当做它所属的特定类型来看待,而是将其当做其基类的对象来对待。这样的代码不会受添加新类型的影响的。 通过导出新的子类型而轻松扩展设计的能力是对改进进行封装的基本方式之一。 编译器不可能产生传统意义上的函数调用。 在OOP中,程序直到运行时才能够确定代码的地址,这叫做后期绑定

Linux启动过程详解

馋奶兔 提交于 2020-03-15 01:43:55
启动 第一步 --加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了。 启动 第二步 --读取MBR 众所周知,硬盘上第0磁道第一个扇区被称为MBR,也就是Master Boot Record,即主引导记录,它的大小是512字节,别看地方不大,可里面却存放了预启动信息、分区表信息。 系统找到BIOS所指定的硬盘的MBR后,就会将其复制到0x7c00地址所在的物理内存中。其实被复制到物理内存的内容就是Boot Loader,而具体到你的电脑,那就是lilo或者grub了。 启动 第三步 --Boot Loader Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备。 Boot Loader有若干种,其中Grub、Lilo和spfdisk是常见的Loader。 我们以Grub为例来讲解吧,毕竟用lilo和spfdisk的人并不多。 系统读取内存中的grub配置信息(一般为menu

java中的final关键词

我的未来我决定 提交于 2020-03-14 19:20:28
谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字。另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法。 一、final关键字的基本用法 在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。下面就从这三个方面来了解一下final关键字的基本用法。 1、修饰类   当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。 在使用final修饰类的时候,要注意谨慎选择,除非这个类真的在以后不会用来继承或者出于安全的考虑,尽量不要将类设计为final类。 2、修饰方法 下面这段话摘自《Java编程思想》第四版第143页:   “使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。在最近的Java版本中,不需要使用final方法进行这些优化了。“   因此,如果只有在想明确禁止

直接初始化、拷贝初始化

随声附和 提交于 2020-03-14 18:46:02
1.直接初始化 1)直接初始化实际上是要求编译器选择 参数最匹配 的一般构造函数 2.拷贝初始化 1)拷贝初始化实际上时要求编译器将 右侧运算对象 拷贝到正在创建的对象中, 如有需要,还要进行类型转换 2)拷贝初始化通常使用拷贝构造函数来完成 3)拷贝初始化发生时机: 用等号"=" 定义 变量时(注意定义二字,不是定义的时候使用等号是调用拷贝赋值运算符) 将一个对象作为实参传递给一个非引用的形参 从一个返回类型为非引用类型的函数中返回一个对象 用花括号列表初始化数组元素或者一个聚合类中的成员(因为也用到了等号"="定义变量) 3)编译器可以“绕过”拷贝构造函数:即编译器有时 可以 进行优化( 但不是必须 ),跳过拷贝构造函数,直接使用转换构造函数构造对象 string s = "666"; //先调用转换构造函数来构造一个临时的string对象(内容为:666),再调用拷贝构造函数用这个临时对象来构造s 编译器可以优化为: string s("666"); //直接调用转换构造函数来构造对象 来源: https://www.cnblogs.com/Joezzz/p/9717699.html

libevent源码剖析

Deadly 提交于 2020-03-14 14:33:40
安装与使用   libevent安装:下载地址: http://libevent.org/ 解压文件:tar -zxvf libevent- 2.1 .8-stable.tar.gz 解压后进入目录,进行配置,把库安装到/usr目录下: ./configure -- prefix= /usr 编译安装:sudo make,sudo make install   libevent将I/O事件、信号事件、定时事件三种事件进行了同一事件源,将所有的就绪事件,放入到激活链表中;然后对激活链表中的事件,调用事件的回调函数执行事件处理 一、event_base   The event_base lies at the center of Libevent; every application will have one.对应的为Reactor实例,使用 libevent 函数之前需要分配一个或者多个 event_base 结构体。每个event_base 结构体持有一个事件集合,可以检测以 确定哪个事件是激活的(相当于epoll红黑树的树根)。   因为不是所有的安插在event_base的事件在调用fork()之后都可以正常工作,所以,如果在使用fork()或者其他相关系统调用启动一个新的进程之后,要想在子进程中使用base变量,但是又想让该base变量是一个全新的没有安插事件的变量

Libevent源码分析—event_init()

拜拜、爱过 提交于 2020-03-14 13:43:53
下面开始看初始化event_base结构的相关函数。相关源码位于 event.c event_init() 首先调用event_init()初始化event_base结构体 struct event_base * event_init(void) { struct event_base *base = event_base_new(); //event_init()调用event_base_new() if (base != NULL) current_base = base; return (base); } 我们发现event_init()工作量很少,只是调用event_base_new()函数,所以真正初始化event_base的工作是在event_base_new()函数内完成。 event_base_new() struct event_base * event_base_new(void) //初始化libevent的event_base { int i; struct event_base *base; if ((base = calloc(1, sizeof(struct event_base))) == NULL) //在堆上分配内存存储event_base,所有字段初始化为0 event_err(1, "%s: calloc", __func__); event