首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++ Primer Plus 第四章 复合类型 学习笔记

1.4 数组初始化规则 1.只有在定义数组时才能初始化,此后不能使用,也不能将一个数值赋给另一个数组。 2.初始化数组时,提供的值少于数组的元素数目。...4.如果初始化为{1}而不是{0},则第一个元素被设置为1,其他元素都被设置为0. 5.如果初始化数组方括号内([])为空,C++编译器将计算元素个数。...也可以只显示定义其中一些枚举的值。 如果第一个变量未初始化,默认为0。后面没有被初始化的枚举的值将比其前面的枚举量大1。也可以创建多个值相同的枚举。...6.3 取值范围的定义 找出上限,需要知道枚举的最大值。 找到大于最大值的,最小的2的幂,减去1,得到就是取值范围的上限。 计算下限,知道枚举的最小值。...地址可知,array对象和数组存储在相同的内存区域(即栈)中,vector对象存储在自由存储区域或堆中。 可以将一个array对象赋给另一个array对象,对于数组,必须逐个元素复制数据。

1.8K00

JAVA 基础

但有以下两个例外: 如果一个整数很小(在byte或short)的范围内,当这个整数常量被付给一个byte或short变量时,整数常量会被当作byte或short类型。...注意:只要为数组元素分配了内存空间,那么元素就一定有一个初始值。          数组初始化有如下两种方式: 静态初始化初始化时用户显示的指定每个数组元素的初始值,由系统决定数组长度。...int[] intArr;  //使用静态初始化初始化数组时只指定数组元素的初始值,不指定数组长度。 ...Object[] objArr;  //使用静态初始化初始化数组数组元素的类型是  //定义数组数组元素类型的子类  objArr = new String[]{"Java" , "张三"}; ...         创建一个数组后,可通过数组下表访问(0开始),可使用for循环来遍历数组元素,也可使用更简洁的foreach进行遍历。

54800
您找到你想要的搜索结果了吗?
是的
没有找到

C++奇迹之旅:C++内存管理的机制初篇

C/C++内存分布 这是C/C++中程序内存区域划分图: 数据段:也叫静态数据段或初始化数据段,用于存储程序中的全局变量和静态变量,这些变量在程序启动时就已经分配好内存空间并初始化。...当你使用字符串字面初始化它时,编译器会在栈上分配足够的内存空间,并将字符串字面的内容(包括结尾的 \0)复制到这块内存中,所以 *char2 指向的是存储在栈上的可修改的字符数组。...*pChar3:const char* pChar3 = "abcd"; 中的字符串字面 "abcd" 存储在只读的数据段(常量区)中。...sizeof: sizeof 是一个操作符,用于获取变量或数据类型的大小(以字节为单位),它在编译时就确定了返回值,不需要在运行时计算,对于数组,sizeof 返回整个数组的大小,而不是单个元素的大小,...(不包括结尾的 '\0' 字符),它在运行时计算字符串的长度,需要遍历整个字符串,对于数组,strlen 只能用于字符数组(字符串),不能用于其他类型的数组,对于指针,strlen 可以计算指针所指向的字符串的长度

10510

《深入理解Java虚拟机》读书笔记(六)–虚拟机类加载机制(上)

《深入理解Java虚拟机》读书笔记(六)--虚拟机类加载机制(上) 一、概述 所谓类加载机制,就是虚拟机把描述类的数据class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的...者4条字节码指令时:生成这4条指令最常见的Java代码场景是:使用new关键实例化对象、读取或设置一个类的静态字段(被final修饰,在编译器就把结果放入常量池的静态字段除外)、调用一个类的静态方法。...对于被动引用,例如: 通过子类访问父类的静态字段,不会触发子类的初始化,只有直接定义这个字段的类才会被初始化 通过数组定义来引用类,不会触发此类的初始化:但是会触发另一个类的初始化,比如com.test.User...常量在编译阶段会存入调用类的常量池,本质上没有直接引用到定义常量的类,因此不会触发定义常量的类的初始化:如果一个类A引用了另一个类B的常量,那么经过编译阶段的常量传播优化,已经将此常量存储到了A类的常量池中...三、类加载的过程 3.1 加载 加载阶段主要完成以下3件事情: 通过一个类的全限定名来获取定义此类的二进制字节流:高自由度,来源可以是ZIP包、网络、运行时计算产生等等 将这个字节流所代表的静态存储结构转换为方法区的运行时数据结构

49220

JVM的类加载机制详解

什么是类加载机制 JVM把描述类的数据Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被JVM直接使用的Java类型,这就是JVM的类加载机制。...比如:获取这个类的二进制字节流,并没有说哪获取,怎么获取,于是就有了压缩包中读取(jar、war、ear)、网络中获取(Applet)、运行时计算生成(动态代理)。...对于不是数组的类的加载,我们可以定义自己的类加载器去控制字节流的获取方式。但是,对于数组类就不一样了,因为数组类本身不是通过类加载器创建的,而是JVM直接创建的。...如果是静态常量(被final修饰),这个阶段就会被直接赋值为代码中写的初始值。 解析 在这个阶段里,JVM把常量池内的符号引用替换为直接引用。...加载是把二进制字节码载入内存,验证是校验字节流中包含的信息是否符合当要求,准备是为静态变量分配内存并设置静态变量初始值,解析是把常量池内的符号引用替换为直接引用,初始化是执行所有静态变量的赋值动作和静态语句块中的语句

56340

C Primer Plus(七)

字符串字面(字符串常量) 用双引号括起来的内容称为字符串字面(string literal),也叫作字符串常量(string constant)。... ANSI C 标准起,如果字符串字面之间没有间隔,或者用空白字符分隔,C 会将其视为串联起来的字符串字面。..."; 让编译器确定初始化字符数组的大小很合理。因为处理字符串的函数通常都不知道数组的大小,这些函数通过查找字符串末尾的空字符确定字符串在何处结束。 让编译器计算数组的大小只能用在初始化数组时。...每个元素被初始化为字符串字面对应的字符。通常,字符串都作为可执行文件的一部分储存在数据段中。当把程序载入内存时,也载入了程序中的字符串。字符串储存在静态存储区(static memory)中。...但是,程序在开始运行时才会为该数组分配内存。此时,才将字符串拷贝到数组中。注意,此时字符串有两个副本。一个是在静态内存中的字符串字面另一个是储存在 ar1 数组中的字符串。

64810

“类加载机制”详解

概述 虚拟机的类加载机制:虚拟机把描述类的数据Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。...或者对该静态变量赋值    遇到 getstatic、putstatic 字节码指令(读取或设置一个类的静态字段的时候,被final修饰、已在编译期把结果放入常量池的静态字段除外)   [3] 调用类的静态方法...常量在编译阶段会存入到调用这个常量的方法所在类的常量池中,本质上,调用类并没有直接引用到定义常量的类,因此并不会触发定义常量类的初始化。...下面对“ldc”助记符以及某些常见助记符进行介绍: 助记符: “ldc”:表示将int、float或是String类型的常量常量池中推送至栈顶 『short s = 7』对应助记符“bipush”...执行性能的角度上讲,验证阶段的工作在虚拟机的类加载子系统中又占了相当大的一部分。

94410

深入理解JVM,虚拟机类加载机制

在上图中,加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班地开始(开始而不是完成,这些阶段是互相交叉着进行的,在一个阶段执行过程中就会激活另一个阶段),而解析阶段则不一定...最常见的生成这4条指令的场景是:使用new关键字实例化对象的时候;读取或设置一个类的静态字段(被final修饰、已在编译期把结果放入常量池的静态字段除外)的时候;以及调用一个类的静态方法的时候。...除此之外,所有引用类的方式都不会触发初始化,称为被动引用。被动引用的常见例子包括: 通过子类引用父类的静态字段,不会导致子类初始化。...常量在编译阶段会存入调用类的常量池中,本质上并没有直接引用到定义常量的类,因此不会触发定义常量的类的初始化。...,只有在真正使用到父接口的时候(如引用接口中定义的常量)才会初始化

41430

面试总结-C++

C++面试题总结 编程基础 C++ 内存管理方式 堆、栈、自由存储区、全局/静态存储区、常量存储区 自由存储区存储malloc申请的内存 (1)静态存储区域分配 。...##### 指针与数组名 - 二者均可通过增减偏移来访问数组中的元素。 - 数组名不是真正意义上的指针,可以理解为常指针,所以数组名没有自增、自减等操作。...修改内容上的差别:指针可能指向一块内存,但是指向的常量却无法通过下标计算。...因为静态成员属于整个类,而不属于某个对象,如果在类内初始化,会导致每个对象都包含该静态成员,这是矛盾的。...=3; //进行定义 https://blog.csdn.net/qq_16209077/article/details/52602601 ``` 拷贝构造函数 调用情况: 用一个类的对象去初始化该类的另一个对象时

2.1K11

我的C语言入门笔记~!

格式化输出语句 格式化输出语句,也可以说是占位输出,是将各种类型的数据按照格式化后的类型及指定的位置计算机上显示。...不可改变的常量 在程序执行过程中,值不发生改变的称为常量。...直接常量也称为字面,是可以直接拿来使用,无需说明的,比如: 整型常量:13、0、-13; 实型常量:13.33、-24.4; 字符常量:‘a’、‘M’ 字符串常量:”I love imooc!”...,静态(static)和外部(extern)类型的数组元素初始化元素为0,自动(auto)类型的数组的元素初始化值不确定。...多维数组初始化与一维数组初始化类似也是分两种: 数据类型 数组名称[常量表达式1][常量表达式2]...[常量表达式n] = {{值1,..,值n},{值1,..,值n},...,{值1,..

4.8K2319

阿里架构师带你深入浅出jvm

作为多线程应用程序的一个示例,某个程序在一个线程上接收用户输入,在另一个线程上执行多种复杂的计算,并在第三个线程上更新数据库。 在单线程应用程序中,用户可能会花费时间等待计算或数据库更新完成。...对于类方法(比如静态方法),方法参数的存储索引0开始;而对于实例方法,索引为0的槽都为存储this指针而保留。 操作数栈 操作数栈在字节码指令被执行的过程中使用。...ldc 该操作码用来运行时常量池取出一个常量压入操作数栈 getstatic 该操作码用来运行时常量池的静态字段列表入栈一个静态值到操作数栈 invokespecialinvokevirtual 这些操作码是一组用来执行方法的操作码...main方法的执行,将顺序经历加载,链接,以及对额外必要的类跟接口的初始化。 加载: 加载是这样一个过程:查找表示该类或接口类型的类文件,并把它读到一个字节数组中。...几种类型的数据会存储在常量池中,它们是: 数值字面 字符串字面 类的引用 字段的引用 方法的引用 如果你编译下面的这个简单的类: package org.jvminternals;public class

67120

C语言最全入门笔记

注:C语言中不存在字符串变量,字符串只能存在字符数组中,这个后面会讲。 格式化输出语句 格式化输出语句,也可以说是占位输出,是将各种类型的数据按照格式化后的类型及指定的位置计算机上显示。...注意:格式符的个数要与变量、常量或者表达式的个数一一对应 不可改变的常量 在程序执行过程中,值不发生改变的称为常量。 mtianyan: C语言的常量可以分为直接常量和符号常量。...直接常量也称为字面,是可以直接拿来使用,无需说明的,比如: 整型常量:13、0、-13; 实型常量:13.33、-24.4; 字符常量:‘a’、‘M’ 字符串常量:”I love imooc!”...,静态(static)和外部(extern)类型的数组元素初始化元素为0,自动(auto)类型的数组的元素初始化值不确定。...多维数组初始化与一维数组初始化类似也是分两种: 数据类型 数组名称[常量表达式1][常量表达式2]...[常量表达式n] = {{值1,..,值n},{值1,..,值n},...,{值1,..

1.9K20

我的C语言入门笔记~!

注:C语言中不存在字符串变量,字符串只能存在字符数组中,这个后面会讲。 格式化输出语句 格式化输出语句,也可以说是占位输出,是将各种类型的数据按照格式化后的类型及指定的位置计算机上显示。...注意:格式符的个数要与变量、常量或者表达式的个数一一对应 不可改变的常量 在程序执行过程中,值不发生改变的称为常量。 mtianyan: C语言的常量可以分为直接常量和符号常量。...直接常量也称为字面,是可以直接拿来使用,无需说明的,比如: 整型常量:13、0、-13; 实型常量:13.33、-24.4; 字符常量:‘a’、‘M’ 字符串常量:”I love imooc!”...,静态(static)和外部(extern)类型的数组元素初始化元素为0,自动(auto)类型的数组的元素初始化值不确定。...多维数组初始化与一维数组初始化类似也是分两种: 数据类型 数组名称[常量表达式1][常量表达式2]...[常量表达式n] = {{值1,..,值n},{值1,..,值n},...,{值1,..

1.2K3429

这是我的C语言入门笔记

格式化输出语句 格式化输出语句,也可以说是占位输出,是将各种类型的数据按照格式化后的类型及指定的位置计算机上显示。...不可改变的常量 在程序执行过程中,值不发生改变的称为常量。...直接常量也称为字面,是可以直接拿来使用,无需说明的,比如: 整型常量:13、0、-13; 实型常量:13.33、-24.4; 字符常量:‘a’、‘M’ 字符串常量:”I love imooc!”...,静态(static)和外部(extern)类型的数组元素初始化元素为0,自动(auto)类型的数组的元素初始化值不确定。...多维数组初始化与一维数组初始化类似也是分两种: 数据类型 数组名称[常量表达式1][常量表达式2]...[常量表达式n] = {{值1,..,值n},{值1,..,值n},...,{值1,..

57620

C语言最全入门笔记

注:C语言中不存在字符串变量,字符串只能存在字符数组中,这个后面会讲。 格式化输出语句 格式化输出语句,也可以说是占位输出,是将各种类型的数据按照格式化后的类型及指定的位置计算机上显示。...注意:格式符的个数要与变量、常量或者表达式的个数一一对应 不可改变的常量 在程序执行过程中,值不发生改变的称为常量。 mtianyan: C语言的常量可以分为直接常量和符号常量。...直接常量也称为字面,是可以直接拿来使用,无需说明的,比如: 整型常量:13、0、-13; 实型常量:13.33、-24.4; 字符常量:‘a’、‘M’ 字符串常量:”I love imooc!”...,静态(static)和外部(extern)类型的数组元素初始化元素为0,自动(auto)类型的数组的元素初始化值不确定。...多维数组初始化与一维数组初始化类似也是分两种: 数据类型 数组名称[常量表达式1][常量表达式2]...[常量表达式n] = {{值1,..,值n},{值1,..,值n},...,{值1,..

1.2K20

C语言基础知识梳理总结

一维数组的定义:类型说明符 数组名【常量表达式】;先定义后引用;一维数组初始化时可以只对一部分元素初始化,在对全部数组元素初始化的时候可以部规定长度;但是若被定义的数组长度与提供的初始值不一样时,...如果初始化时能指定所有元素的初始值,第一维大小可以省略,但是第二维不能省略。   字符数组:定义和初始化数组差不多,只是需要加单引号。字符和字符串结束标志,C语言规定,以‘\0’代表。...字符串处理函数:   1、puts()将一个字符串输出到终端   2、gets()终端输入一个字符串到字符数组,并且得到一个函数值。   3、strcat()链接两个字符数组中的字符串。   ...静态局部变量主要用在当初始化后,变量只是被引用而不改变其值。...register变量是C语言中允许将局部变量的值放在CPU中的寄存器中需要时直接寄存器中取出来参加运算,不必再到内存中提取,但是计算机系统中寄存器数量有限,不能任意定义任意多的存储器,局部静态变量不能定义为寄存器变量

70410

最全的C语言基础知识梳理总结

数组名【常量表达式】;先定义后引用;一维数组初始化时可以只对一部分元素初始化,在对全部数组元素初始化的时候可以部规定长度;但是若被定义的数组长度与提供的初始值不一样时,则数组长度不能省略。...如果初始化时能指定所有元素的初始值,第一维大小可以省略,但是第二维不能省略。 字符数组:定义和初始化数组差不多,只是需要加单引号。字符和字符串结束标志,C语言规定,以‘’代表。...字符串处理函数: 1、puts()将一个字符串输出到终端 2、gets()终端输入一个字符串到字符数组,并且得到一个函数值。 3、strcat()链接两个字符数组中的字符串。...静态局部变量主要用在当初始化后,变量只是被引用而不改变其值。...Register变量是C语言中允许将局部变量的值放在CPU中的寄存器中需要时直接寄存器中取出来参加运算,不必再到内存中提取,但是计算机系统中寄存器数量有限,不能任意定义任意多的存储器,局部静态变量不能定义为寄存器变量

1.9K40

《C Primer》笔记(上篇)

复合字面 字面指的是除符号常量之外的常量,例如5是int类型的字面,81.3是double类型的字面,复合字面指的是代表数组和结构内容的字面。..."; 数组形式: 数组形式ar[]在计算机的内存中分配为一个内含29个元素的数组(每个元素对应一个字符,加上末位的空字符\0),每个元素被初始化为字符串字面对应的字符。...注意,此时字符串有两个副本,一个是在静态内存中的字符串字面另一个是存储在ar1数组中的字符串。 此后,编译器便把数组名ar1识别为该数组首元素地址&ar1[0]的别名。...==如果把一个字符串字面拷贝给一个数组,就可以随意改变数据,除非把数组声明为const。 总结: 初始化数组静态存储区的字符串拷贝到数组中,而初始化指针只把字符串的地址拷贝给指针。...mytalents中的指针指向初始化时所用的字符串字面的位置,这些字符串字面被储存在静态内存中;而yourtalents中的数组则存储着字符串字面的副本,所以每个字符串都被存储了两次。

1.8K40

辛苦整理的C语言笔记,一学就会

注:C语言中不存在字符串变量,字符串只能存在字符数组中,这个后面会讲。 格式化输出语句 格式化输出语句,也可以说是占位输出,是将各种类型的数据按照格式化后的类型及指定的位置计算机上显示。...注意:格式符的个数要与变量、常量或者表达式的个数一一对应 不可改变的常量 在程序执行过程中,值不发生改变的称为常量。 mtianyan: C语言的常量可以分为直接常量和符号常量。...直接常量也称为字面,是可以直接拿来使用,无需说明的,比如: 整型常量:13、0、-13; 实型常量:13.33、-24.4; 字符常量:‘a’、‘M’ 字符串常量:”I love imooc!”...,静态(static)和外部(extern)类型的数组元素初始化元素为0,自动(auto)类型的数组的元素初始化值不确定。...多维数组初始化与一维数组初始化类似也是分两种: 数据类型 数组名称[常量表达式1][常量表达式2]...[常量表达式n] = {{值1,..,值n},{值1,..,值n},...,{值1,..

87330

Java核心-核心类与API(1)

注:字符串常量池的特点是有且只有一份相同的字面,如果有其它相同的字面,JVM则返回这个字面的引用地址,如果没有相同的字面,则在字符串常量池创建这个字面并返回它的引用地址。...字符串常量池是全局共享的,故也称全局字符串池。字符串池中维护了共享的字符串对象,这些字符串不会被垃圾收集器回收)。 字面也常称为常量,Java的字面可以是任意基本数据类型。...每种字面的表示取决于类型,eg:100、‘a’、“a” 3.2 两种形态 1)静态常量池 即*.class文件中的常量池,class文件中的常量池不仅仅包含字符串(数字)字面,还包含类、方法的信息...类的非静态成员变量也放在堆区,其中基本数据类型是直接保存值,而复杂类型是保存指向对象的引用,非静态成员变量在类的实例化时开辟空间并且初始化。要知道类的几个时机,加载-连接-初始化-实例化。...包括可以在编译时不用访问普通变量或调用方法就可以计算出来的字符串值):先在常量池创建 “ABCD”(若常量池已存在 “ABCD”,则不再创建),str1 再引用String str1 = “ABCD”;

29821
领券