指针初始化

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语言基础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中,程序直到运行时才能够确定代码的地址,这叫做后期绑定

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变量是一个全新的没有安插事件的变量

out 和 ref 之间的区别整理

可紊 提交于 2020-03-13 12:58:36
ref 和 out 都是 C# 中的关键字,所实现的功能也差不多,都是指定一个参数按照引用传递。 对于编译后的程序而言,它们之间没有任何区别,也就是说它们只有语法区别。 总结起来,他们有如下语法区别: 1 、 ref 传进去的参数必须在调用前初始化, out 不必,即: int i; SomeMethod( ref i );// 语法错误 SomeMethod( out i );// 通过 2 、 ref 传进去的参数在函数内部可以直接使用,而 out 不可: public void SomeMethod(ref int i) { int j=i;// 通过 //... } public void SomeMethod(out int i) { int j=i;// 语法错误 } 3 、 ref 传进去的参数在函数内部可以不被修改,但 out 必须在离开函数体前进行赋值。 ref 在参数传递之前必须初始化;而 out 则在传递前不必初始化,且在 ... 值类型与引用类型之间的转换过程称为装箱与拆箱。 总结: 应该说,系统对 ref 的限制是更少一些的。 out 虽然不要求在调用前一定要初始化,但是其值在函数内部是不可见的,也就是不能使用通过 out 传进来的值,并且一定要在函数内赋一个值。或者说函数承担初始化这个变量的责任。 下面谈谈ref和out到底有什么区别: 1 关于重载

第一篇博客 C+++知识点总结一

眉间皱痕 提交于 2020-03-12 11:58:32
1.成员 1.比较特殊的成员类型:protected. 保护成员在本类中和private类型的成员作用一模一样。区别在于保护成员可以由本类的派生类的成员函数访问,但是私有成员在其派生类中无法访问。 2.成员函数的定义 成员函数如果在类外定义,那么函数声明的参数表可以只写参数类型,但是在类外定义时必须给出参数名。 3.内联成员函数 (1)隐式定义内联成员函数 直接在类内定义的成员函数 (2)显式定义内联成员函数 用关键字inline声明(在声明和定义的语句句子开头加inline),此时可以在类内声明,类外定义。声明、定义都要在句首加inline. (3)内联函数 内联函数的代码会在编译时插入到每一个调用它的地方。这种做法会提高运行效率。但是只有很简短的代码才实用。 2.对象(成员访问,初始化方式) 1.对象成员的访问方式: 例如对对象d中成员year的访问 d.year (*p).year p->year 2.对象的初始化 (1) class complex { public: double real; //数据成员是public时才能使用这种方法 double imag; }; complex c={1.1,2.2}; (2)用构造函数(作用:为对象分配空间,进行初始化) 例如: ... class complex { public: complex(int a,int b)

何为安全发布,又何为安全初始化?

你。 提交于 2020-03-12 08:40:54
前言 很多时候我们需要跨线程共享对象,若存在并发我们必须以线程安全的方式共享对象,此时将涉及到我们如何安全初始化对象从而进行安全发布,本节我们将来讨论安全初始化、安全发布,文中若有错误之处,还望批评指正。 安全发布 按照正常叙述逻辑来讲,我们应该首先讨论如何安全初始化,然后再进行安全发布分析,在这里呢,我们采取倒叙的方式,先通过非安全发布的方式讨论所出现的问题,然后最后给出如何进行安全初始化,如下,我们以单例模式为例。 public class SynchronizedCLFactory { private Singleton instance; public Singleton get() { synchronized (this) { if (instance == null) { instance = new Singleton(); } return instance; } } } public class Singleton { } 如上提供了用于获取Singleton实例的公共方法,我们通过同步关键字保持线程安全,无论有多少个线程在请求一个Singleton,也不管当前状态如何,所有线程都将获得相同的Singleton实例,Singleton初始化在第一次请求Singleton时发生,而不是在初始化Singleton类时发生,至于是否惰性初始化并不是我们关注的重点

ptmalloc一些细节流程

孤人 提交于 2020-03-11 05:14:19
chunk 容器 Bins ptmalloc统一管理heap和mmap区的chunk,避免了频繁的系统调用,一共维护了128个bin,使用数组来存储,所有的bin都是双向链表。   2 .Fast Bins 对于不大于max_fast的chunk加入fast bins,标志位P不改变(为了不使其合并),在认为内存碎片太多时会将其合并加入unsorted bin。   3. Unsorted Bin 对于回收的chunk大于max_fast或合并完的 fast bin 会加在这里,在fast bin中没有找到合适的chunk后,会在这里找,如果没有将其加入到合适的bin中,相当于其他bin的高速缓存。   4 . Top chunk 在sub_heap的最高处不属于任何chunk,总是在small bin 和large bin 后考虑,与收缩条件息息相关。   5 .mmap chunk 申请的内存足够大时,直接使用mmap向系统申请资源,同时释放时也是直接解除映射。   6 .Last remainder 一种特殊的chunk,不属于任何bin,当需要分配一个small chunk时,没有相应的chunk,last remainder chunk会分裂成两个,一个返回给用户,另一个变成新的last remainder chunk。 核心结构 对于主分配区,使用了静态全局的结构体定义

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: // 无参数构造函数 // 如果创建一个类你没有写任何构造函数,则系统会自动生成默认的无参构造函数,函数为空,什么都不做 // 只要你写了一个下面的某一种构造函数,系统就不会再自动生成这样一个默认的构造函数,如果希望有一个这样的无参构造函数