初始化

memset初始化结构体之内存泄漏

心已入冬 提交于 2020-02-01 06:07:31
void *memset(void *str, int c, size_t n) 复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。 str – 指向要填充的内存块。 c – 要被设置的值。该值以 int 形式传递,但是函数在填充内存块时是使用该值的无符号字符形式。 n – 要被设置为该值的字节数。 声明:在花括号中间,每个结构代表一个作用域,可以防止命名冲突, struct { int number; int *ptr; char name [NAME_LEN + 1]; }part1,part2; 如果常用到,可以使用类型定义这样声明, typedef struct { int number; int *ptr; char name [NAME_LEN + 1]; }part_t; part_t part1,part2; 还有一种是结构标记声明, struct part{ int number; int *ptr; char name [NAME_LEN + 1]; }; struct part part1, part2; 初始化:可以在声明的同时初始化,如 part_t part1 = {22, &item, “Good boy”}; // 这种初始化和数组很相似。 也可以指定初始化: part_t part2 = {.number=33,

java编程学习006--数组

牧云@^-^@ 提交于 2020-02-01 02:40:29
1.数组定义和访问 1.1 数组的概念 数组的概念:是一种容器,可以同时存放多个数据值。 数组的特点: 1. 数组是一种引用数据类型 2. 数组当中的多个数据,类型必须统一 3. 数组的长度在程序运行期间不可改变 1.2 数组的定义 数组的初始化:在内存当中创建一个数组,并且向其中赋予一些默认值。 两种常见的初始化方式: 动态初始化(指定长度):在创建数组的时候,直接指定数组当中的数据元素个数。 静态初始化(指定内容):在创建数组的时候,不直接指定数据个数多少,而是直接将具体的数据内容进行指定。 动态初始化数组的格式: 数据类型[] 数组名称 = new 数据类型[数组长度]; 解析含义: 左侧数据类型:也就是数组当中保存的数据,全都是统一的什么类型 左侧的中括号:代表我是一个数组 左侧数组名称:给数组取一个名字 右侧的new:代表创建数组的动作 右侧数据类型:必须和左边的数据类型保持一致 右侧中括号的长度:也就是数组当中,到底可以保存多少个数据,是一个int数字 静态初始化基本格式: 数据类型[] 数组名称 = new 数据类型[] { 元素1, 元素2, ... }; 注意事项: 虽然静态初始化没有直接告诉长度,但是根据大括号里面的元素具体内容,也可以自动推算出来长度。 使用静态初始化数组的时候,格式还可以省略一下。 标准格式: 数据类型[] 数组名称 = new 数据类型[]

ESP8266 01S GPIO中断

自作多情 提交于 2020-02-01 02:22:03
文章目录 学习记录 初始化IO 中断配置 读中断 清中断 函数 重点 学习记录 ESP8266 01S GPIO中断 初始化IO PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U, FUNC_GPIO0); // GPIO_0作为GPIO口 GPIO_DIS_OUTPUT(GPIO_ID_PIN(0)); // GPIO_0失能输出(默认) //即设为输入模式 中断配置 ETS_GPIO_INTR_DISABLE ( ) ; // 关闭GPIO中断功能 ETS_GPIO_INTR_ATTACH ( ( ets_isr_t ) GPIO_INTERRUPT , NULL ) ; // 注册中断回调函数 gpio_pin_intr_state_set ( GPIO_ID_PIN ( 0 ) , GPIO_PIN_INTR_NEGEDGE ) ; // GPIO_0下降沿中断 ETS_GPIO_INTR_ENABLE ( ) ; // 打开GPIO中断功能 // GPIO_PIN_INTR_DISABLE = 0, // 不触发中断 // GPIO_PIN_INTR_POSEDGE = 1, // 上升沿中断 // GPIO_PIN_INTR_NEGEDGE = 2, // 下降沿中断 // GPIO_PIN_INTR_ANYEDGE = 3, //

c++复合类型

别等时光非礼了梦想. 提交于 2020-02-01 01:04:24
1.数组 数组存储同类型的值; 数组使用下标或索引对元素进行标号,从0开始编号; 只能在定义数组时才能使用初始化,此后就不可以了,也不能将一个数组赋给另一个数组; 初始化数组时,提供的值可以少于数组元素的值。如果只对数组的一部分初始化,则编译器将把其他元素设置为0。因此,将数组中所有元素都初始化为0非常简单——只需显式地将第一个元素初始化为0,然后让编译器将其他元素都初始化为0即可:long totals[500] = {0}. 2.字符串   要将字符串存储到数组中,最常用的方法有两种——将数组初始化为字符串常量、将键盘或文件输入读入到数组中。 3.string类 可以使用c-风格字符串来初始化string对象; 可以使用cin来将键盘输入存储到string对象中; 可以使用cout来显示string对象; 可以使用数组表示法来访问存储在string对象中的字符。   c风格的字符串是用数组存放的,一般要以'\0'结束而c++主要以 string类 代替,更加高效,且不易出错   例如:string str = "123";就是c++的风格;char str[4]="123";就是c风格。string是c++中的关键字,和int,float等等一样, 在c++中,string 定义的变量可以直接存储字符串。在C语言中是没有这种直接存储字符串的变量的。   [ ]里面是4,是因为

spring ioc容器源码分析

六眼飞鱼酱① 提交于 2020-02-01 00:52:29
Spring 最重要的概念是 IOC 和 AOP,本篇文章其实就是要带领大家来分析下 Spring 的 IOC 容器。既然大家平时都要用到 Spring,怎么可以不好好了解 Spring 呢?阅读本文并不能让你成为 Spring 专家,不过一定有助于大家理解 Spring 的很多概念,帮助大家排查应用中和 Spring 相关的一些问题。 本文采用的源码版本是 4.3.11.RELEASE,算是 5.0.x 前比较新的版本了。为了降低难度,本文所说的所有的内容都是基于 xml 的配置的方式,实际使用已经很少人这么做了,至少不是纯 xml 配置,不过从理解源码的角度来看用这种方式来说无疑是最合适的。 阅读建议:读者至少需要知道怎么配置 Spring,了解 Spring 中的各种概念,少部分内容我还假设读者使用过 SpringMVC。本文要说的 IOC 总体来说有两处地方最重要,一个是创建 Bean 容器,一个是初始化 Bean,如果读者觉得一次性看完本文压力有点大,那么可以按这个思路分两次消化。读者不一定对 Spring 容器的源码感兴趣,也许附录部分介绍的知识对读者有些许作用。 希望通过本文可以让读者不惧怕阅读 Spring 源码,也希望大家能反馈表述错误或不合理的地方。 目录 文章目录 引言 BeanFactory 简介 启动过程分析 创建 Bean 容器前的准备工作 创建

vue create 和vue init webpack的区别

牧云@^-^@ 提交于 2020-02-01 00:43:32
都是因为vue-cli 不同版本号 之间 初始化方式 的 不同 vue create 是vue-cli3.x 的初始化方式,目前模板是固定的,模板选项可自由配置,创建出来的是vue-cli3的项目,与cue-cli2项目结构不同,配置方法不同,具体配置方法参考官方文档 网页链接 。 vue init 是vue-cli2.x 的初始化方式,可以使用github上面的一些模板来初始化项目,webpack是官方推荐的标准模板名。vue-cli2.x项目向3.x迁移只需要把static目录复制到public目录下,老项目的src目录覆盖3.x的src目录(如果修改了配置,可以查看文档,用cli3的方法进行配置) 使用方法: 一.vue cli2升级到vue cli3 1.先升级npm的版本 npm install -g npm 2.再卸载之前的vue cli 2.9.6 npm uninstall -g @vue/cli 3.下载最新的vue cli版本 npm install -g @vue/cli 二.vue3,0版本创建项目 1、vue create myproject 2、默认选择default方式即可 vue2.0和vue3.0的区别 1.打包方式: 2.0是通过:npm run dev 3.0是:npm run serve 至于为什么会变,来看一下package.json 2

Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

五迷三道 提交于 2020-01-31 23:02:33
hive使用show databases;命令报错: 1.确认hive-site.xml中的地址,用户名还有密码填写正确: 2.确认lib目录下已经添加了mysql的驱动包: 3.需要初始化元数据: ./schematool -initSchema -dbType mysql 使用上面的命令初始化元数据,在mysql的表里面就有数据了 来源: CSDN 作者: thetimelyrain 链接: https://blog.csdn.net/thetimelyrain/article/details/104123325

Spring 核心容器 IOC

跟風遠走 提交于 2020-01-31 22:34:39
目录 1. BeanFactory 2. BeanDefinition 3、BeanDefinitionReader 4 . Web IOC 容器初体验 一 、BeanFactory Spring Bean 的创建是典型的工厂模式,这一系列的 Bean 工厂,也即 IOC 容器为开发者管理对象 间的依赖关系提供了很多便利和基础服务。最基本的 IOC 容器接口 BeanFactory,来看一下它的源码: public interface BeanFactory { //对 FactoryBean 的转义定义,因为如果使用 bean 的名字检索 FactoryBean 得到的对象是工厂生成的对象, //如果需要得到工厂本身,需要转义 String FACTORY_BEAN_PREFIX = "&"; //根据 bean 的名字,获取在 IOC 容器中得到 bean 实例 Object getBean(String name) throws BeansException; //根据 bean 的名字和 Class 类型来得到 bean 实例,增加了类型安全验证机制。 <T> T getBean(String name, @Nullable Class<T> requiredType) throws BeansException; Object getBean(String name,

c++17(1)-初始化列表,数字输出格式,for,auto

梦想与她 提交于 2020-01-31 22:34:19
# include <iostream> using namespace std ; int main ( int argc , char * * argv ) { int nums [ ] { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 } ; int x { 19 } ; double y { 3.8 } , z { 9.08 } ; string myStr1 { "hello" } ; char myStr2 [ ] { "world" } ; for ( char c : myStr1 ) { cout << c << endl ; } for ( auto c : myStr1 ) { cout << c << endl ; } for ( char c : myStr2 ) { cout << c << endl ; } for ( int x : nums ) { cout << x + 10 << endl ; } cout << x << endl << y << endl << z << endl ; cout << "======" << endl ; cout << "X" << hex << x << endl ; //十六进制 cout << dec << x << endl ; //十进制 cout << "0" << oct <<

c++堆,栈的存储方式及代码内存分配

天大地大妈咪最大 提交于 2020-01-31 22:32:25
使用对象指针 C语言中经典的指针在 C++ 中仍然广泛使用,尤其是指向对象的指针,没有它就不能实现某些功能。 Student stu ; Student * pStu = & stu ; 上面代码中创建的对象 stu 在栈上分配内存,需要使用&获取它的地址,例如: Student stu;Student *pStu = &stu; pStu 是一个指针,它指向 Student 类型的数据,也就是通过 Student 创建出来的对象。 当然,你也可以在堆上创建对象,这个时候就需要使用前面讲到的new关键字(C++ new和delete运算符简介),例如: Student *pStu = new Student; 在栈上创建出来的对象都有一个名字,比如 stu,使用指针指向它不是必须的。但是通过 new 创建出来的对象就不一样了,它在堆上分配内存,没有名字,只能得到一个指向它的指针,所以必须使用一个指针变量来接收这个指针,否则以后再也无法找到这个对象了,更没有办法使用它。也就是说,使用 new 在堆上创建出来的对象是匿名的,没法直接使用,必须要用一个指针指向它,再借助指针来访问它的成员变量或成员函数。 栈内存是程序自动管理的,不能使用 delete 删除在栈上创建的对象;堆内存由程序员管理,对象使用完毕后可以通过 delete 删除。在实际开发中,new 和 delete 往往成对出现