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

C++11基础学习系列三

今天来了解一下C++中数组数组也是存放相同类型容器,数组大小是固定不变(编译数组维度必须是已知)。如果想动态操作容器(增加,删除等)或者事先不知道容器大小,请使用vector。...在使用数组注意一下几点: 1.数组维度必须是常量表达式,在编译是已知。...局部静态对象 通过static将局部对象定义,执行第一次经过对象定义语句初始化,知道程序结束销毁,内置类型局部静态变量初始化为0....函数参数传递 依据形参传递类型将函数传递,分为按引用传递和按传递,当形参引用类型是按引用传递,实际是传递实参别名。当实参被拷贝给形参,形参和实参是两个互相独立对象,这是按传递。...由于拷贝大类型对象或者容器对象比较低效,甚至有的类型(IO类型)是不支持拷贝,这时我们尽量采用按引用传递,这样可以避免拷贝付出代价。如果函数内无须改变参数,最好将其声明为常量引用。

80440

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

当你使用字符串字面量初始化它,编译器会在栈上分配足够内存空间,并将字符串字面量内容(包括结尾 \0)复制到这块内存中,所以 *char2 指向是存储在栈上可修改字符数组。...sizeof(ptr1) = 8; ptr1 是一个指向动态分配 int 类型数组指针,在 32 位系统上,指针大小 4 字节。在 64 位系统上,指针大小 8 字节。...sizeof 和 strlen 是两个不同操作符/函数,sizeof 是一个编译操作,返回变量或数据类型大小;而 strlen 是一个运行时函数,返回字符串长度。...sizeof: sizeof 是一个操作符,用于获取变量或数据类型大小(以字节单位),它在编译就确定了返回,不需要在运行时计算,对于数组,sizeof 返回整个数组大小,而不是单个元素大小,...new int[10]{ 2,3,4,5,5 }; delete[] ptr3; return 0; } 这样一部分初始化想要,后面默认初始化为0 使用 new和 delete操作符,编译器会自动调用构造函数和析构函数

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

c++基础之变量和基本类型

实际上c++ 并没有给这些类型大小都定义死,而是固定了一个最小尺寸,而具体大小究竟定义多少,不同编译器有不同实现,比如我尝试wchar_t 类型在vc 编译环境中占2个字节,而g++编译出来占...数值类型进行类型转化时,一般遵循如下规则: 把数字类型转化为bool类型,0会转化为false,其他最后会被转化为true 当把bool转化为非bool类型,false会转化为0,true会被转化为...1 把浮点数转化为整型,仅保留小数点前面的部分 把整型转化为浮点数,小数部分为0;如果整数大小超过浮点数表示范围,可能会损失精度 当给无符号类型整数赋值一个超过它表示范围,会发生溢出。...指针本身应该是一个无符号整数,指针大小与程序中地址所占内存空间一致,32位程序中指针是4字节,64位程序,指针大小8字节 使用指针限制比引用要宽泛多 指针可以指向对象,也可以指向另一个指针 指针不需要初始化...,后续可能会有代码对其进行修改 const int j = i + 20; // 是常量表达式,根据前面的代码,i是常量表达式,这个表达式中i会在编译进行替换,也就说j在编译也能确定初始 const

1.5K30

类加载机制与对象创建

2) 准备: 静态变量分配内存,并将其初始化为默认 准备阶段是正式类变量分配内存并设置类变量初始阶段,这些内存都将在方法区中分配。...,静态变量赋予正确初始,JVM负责对类进行初始化,主要对类变量进行初始化。...这说明如果使用final并没有初始化Test2,这里说一个原理: 常量编译阶段会存入调用这个常量方法所在常量池当中,本质上调用类并没有直接引用到定义常量所在类,因此并不会触发定义产量初始化...,这跟上一个例子有些不同,关键在于Test1所定义常量str在编译期间无法确定,只有在运行期间才能确定,这样就导致了目标类初始化: 当编译期无法确定具体常量,那么其不会放到调用类常量池,就会导致主动使用这个常量所在类...所以写例模式时候要注意(DCL双重锁)。 对象创建详细过程 1).检验 当虚拟机执行到new,会先去常量池中查找这个类符号引用。

67020

C++面试知识总结

1.2 内存溢出原因 栈溢出:越界访问造成,例如局部变量数组越界访问或者函数内局部变量使用过多,超出了操作系统该进程分配大小,还有递归函数层次过多超过了栈大小。...枚举常量则是在编译时候确定其。 一般在编译器里,可以调试枚举常量,但是不能调试宏常量。 枚举可以一次定义大量相关常量,而#define 宏一次只能定义一个。...2.18 static全局变量与普通全局变量区别 全局变量在整个工程文件内都有效。 静态全局变量只在定义它文件内有效。 全局变量和静态变量如果没有手工初始化,则由编译初始化为0。...2.20 sizeof用在不同对象上区别 sizeof是C语言一种目操作符,并不是函数。sizeof以字节形式返回操作数大小。...数组做sizeof参数不退化,传递给strlen就退化为指针了。 sizeof操作符结果类型是size_t,它在头文件中typedefunsigned int类型。

1.7K41

Java虚拟机

编译器把Java源码编译为字节码,它会用int或byte来表示boolean。Boolean数组是当byte数组来访问。...装载顺序: 1)装载——查找并装载类型二进制数据 2)连接——执行验证(确保被导入类型正确性),准备(类变量分配内存,并将其初始化为默认),以及解析(把类变量中符号引用转换为正确初始) 3...)初始化——把类变量初始化为正确初始 3.3方法区 在java虚拟机中,关于被装载类型信息存储在一个逻辑上被称为方法区内存中。...局部变量区和操作数栈大小要视对应方法而定,编译器在编译就确定的确定了这些并放在class文件中。帧数据区大小依赖于具体实现。...当虚拟机执行一条指令时候,可能使用当前常量池中项、当前帧局部变量中,或者当前帧操作数栈顶端。 执行技术:解释、即时编译、字适应优化、芯片级直接执行。

1.2K100

C++ 面试必备:常见 C++ 面试题汇总及详细解析

内联函数和普通函数区别在于是否进行了“内联优化”。内联函数是一种特殊函数,编译器会在编译将其整个函数体插入到调用该函数地方,从而节省了函数调用开销。...而指针常量定义方式int* const ptr,表示指向int类型指针常量,指针所指向地址可以改变,但是不能通过指针修改地址对应。...当我们访问野指针,程序会出现不可预期行为,甚至崩溃。 为了避免野指针,我们可以采取以下措施: 在指针使用前初始化 在定义一个指针变量时候,我们应该立即将其初始化为一个有效地址。...如果不能确定指针初始,可以将其初始化为 nullptr 或 0,避免野指针产生。...int* p = nullptr; // 初始化为空指针 在指针使用后及时置空 当指针变量不再使用时,我们应该将其空指针,防止误用。这样可以有效地避免产生野指针。

1.9K30

“类加载机制”详解

“anewarray”:表示创建一个引用类型(如类、接口、数组数组,并将其引用压入栈顶 [2]『int[] ints = new int[1]』对应字节码代码: ?...“newarray”:表示创建一个指定原始类型(如int、float、char等)数组,并将其引用压入栈顶 ④『public static final int a = 1;』常量编译阶段会存入调用类常量池中...str是类级别的属性(static),它被所有的实例对象共享,且该str字段是不可变(final),从这两点(static final)编译器确定了str是一个“编译期可知全局常量值”,因此就可以将其直接放到调用该字段常量池中...而本例中,num虽然也是“全局常量”,但是该常量编译器是无法得知,需要在运行时初始化MyClass2类才能得到,所以这里会对MyClass2进行初始化。...准备 目的 静态变量分配内存,并将其初始化为默认。 ?

94610

C++基础闯关100题,你能闯多少?【2021超硬核大厂高频面试题】

因为sizeof编译确定,所以不能用来得到动态分配(运行时分配)存储空间大小。...假设数组int a[10]; int (*p)[10] = &a; a是数组名,是数组首元素地址,+1表示地址加上一个int类型大小,如果a是0x00000001,加1操作后变为0x00000005...&a是数组指针,其类型int (*)[10](就是前面提到数组指针),其加1,系统会认为是数组首地址加上整个数组偏移(10个int型变量),数组a尾元素后一个元素地址。...若(int *)p ,此时输出 *p,其a[0],因为被转为int *类型,解引用时按照int类型大小来读取。 23、虚函数与纯虚函数区别?...链地址法:基本思想是将所有哈希地址 i 元素构成一个称为同义词链链表,并将链表头指针存在哈希表第i个单元中,因而查找、插入和删除主要在同义词链中进行。

1.9K20

第6章 函数

局部静态对象在程序执行路径第一次经过对象定义语句初始化,直到程序终止才被销毁;如果局部静态变量没有显式初始,执行初始化,内置类型被初始化为 0。...数组不允许拷贝,所以无法以传递形式传递数组参数;使用数组通常会将其转换成指针,所以当函数传递一个数组参数,实际传递是指向数组首元素指针。数组大小对函数调用没有影响。...// 正确 对于数组引用形参,因为维度是数组类型一部分,所以声明数组引用形参必须指定数组维度,也只能将函数应用于指定大小数组。...但是如果两种表达式都存在,且实参常量对象,会优先调用第一个非常量版本。因为第一个表达式精确匹配,而第二个表达式则需要将非常量类型转化为常量类型。 3....这样做,可以大大扩展一个函数适用范围,对于需要使用在编译期就能知道常量表达式场景(如数组大小说明,整形模板参数(包括std::array对象长度),枚举成员等),该函数也可以使用了。

1.2K70

C Primer Plus(五)

数组前必须先初始化它。否则,编译器使用是内存相应位置上现有。如果初始化列表中缺少元素,则该位置上元素 0。...也就是说如果不初始数组数组元素和未初始普通变量一样,其中储存都是垃圾;但是,如果部分初始数组,剩余元素就会被初始化为 0。...如果初始化列表项数多于数组元素个数,则会出现数组越界错误。 如果初始数组省略方括号中数字,编译器会根据初始化列表中项数来确定数组大小。...,如该例中初始化列表开始把 days[1] 初始化为 28,但是 days[1] 又被后面的指定初始化 [1] = 29 初始化为 29 如果未指定元素大小编译器会把数组大小设置足够装得下初始...数组作为函数参数 数组名作为函数形参,在函数体内,其失去了本身内涵,仅仅只是一个指针 在失去其内涵同时,它还失去了其常量特性,可以作自增、自减等操作,可以被修改 所以,数据名作为函数形参,其全面沦落一个普通指针

39910

第七节(指针)

虽然程序使用了该位置地址,但是对用户是隐藏,不必关心它。 下面用图来帮助你理解。程序声明了一个名为rate变量,并将其初始化为100。...假设声明一个名为ptr指针,已将其初始化为指向var变量,以下说法都正确: ●*ptr和var都引用var内容(即,程序储存在该位置任何) ; ●*ptr和&var都引用var地址。...可将其概括:要访问某种数据类型数组连续元素,必须以sizeof(数据类型)递增指针。第3节中学过sizeof()运算符以字节单位返回C语言数据类型大小。...注意:不能递增或递减指针常量(数组名就是指针常量)。 记住,操纵指向数组元素指针,C编译器不会记录数组开始和结束。...下面程序清单接受用户提供一系列,并将其储存在数组中。然后调用largest()函数,并将数组(指向该数组指针和数组大小)传递给它。该函数在数组中找出最大将其返回主调函数。

17940

【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)

只在初始化中初始化指定个数元素, 那么元素个数就是数组大小 ; //隐式初始化, 该数组个数 4 int array[] = {0, 1, 2, 3}; 数组初始化 : 1.完全初始化 : 数组大小...5, 将 5 个元素都在定义指定位置 ; 2.部分初始化 : 数组大小5, 如果初始化前 1 ~ 4 个元素, 剩余元素默认初始化为 0 ; 3.初始化效率 : 初始化效率很高, 远远比依次赋值要高..., 因此建议定义数组最好初始化 ; 4.最佳实践 : //这里只对数组第一个元素进行初始化为0, 那么其余元素默认也初始化为0, 初始化效率要远远高于依次赋值效率 int array[5] =...显示声明数组大小, 其实际大小以中括号为准, 大小 5, 5个元素只有 前3个初始化为 0, 1, 2 //初始化说明 : int array_1[5] = {0, 1, 2}; int array...; 参数上区别 ( 等价 ) : 作为参数, 数组 和 指针 参数等价, 数组会退化为指针, 丢失长度信息 ; 指针 数组 性质 : 1.数组 ( 常量 ) : 数组大部分情况下可以当做常量指针

3.6K30

Go复合类型之数组类型

方法二:根据初始个数自动推断数组长度 在这种方式下,你可以在声明数组省略长度,并使用...操作符,编译器会根据提供初始个数自动推断数组长度。...这种方式允许你在数组指定索引位置提供初始,其他位置会被初始化为默认。...3.2 获取数组长度 在Go语言中,数组长度在定义后就不可更改,在声明时长度可以为一个常量或者一个常量表达式(常量表达式是指在编译期即可计算结果表达式)。...Go 编译器在为数组类型变量实际分配内存,会为 Go 数组分配一整块、可以容纳它所有元素连续内存,如下图所示: 我们从这个数组类型内存表示中可以看出来,这块内存全部空间都被用来表示数组元素,所以说这块内存大小...而以 mArr[0]例,我们可以将其看成一个拥有 3 个元素且元素类型[4]int 数组,也就是图中中间层画那样。

20240

第六节(数值数组

以本次程序例,如果在声明数组使用#define指令创建符号常量, 则只需更改常量便可改变队员的人数,而不必在程序中逐一更改与人数相关量。 数组维数尽量不要超过三维。...如果省略了数组大小编译器会创建一个刚好可以容纳初始数组。...如果初始太多(初始数量多于数组元素个数),编译器会报错。 根据ANSI 标准,未初始数组元素将被设置0。 提示: 不要依赖编译器自动初始。最好自已设置初值。...8 array[2][2]中储存是9 array[3][0]中储存是10 array[3][1]中储存是11 array[3][2]中储存是12 初始化多维数组,使用花括号分组初始,并将其分成多行...使用数组,相当于把许多值用一个名称来分组。在上述程序中,储存了1000个。如果创建1000个变量(其起不同变量名)并将每个变量初始化为一个随机数,无疑是一项异常繁琐工程。

17010

Java入门基础知识点总结(详细篇)

在用于计算时候会自动转化为int类型。 Java中还允许使用转义字符‘\’来将其字符转变为特殊字符型常量。...数据类型按容量大小排序: ①有多种类型数据混合运算,系统首先自动将所有数据转换成容量最大那种数据类型,然后再进行计算。...②byte,short,char之间不会相互转换,他们三者在计算首先转换为int类型。 ③当把任何基本类型和字符串进行连接运算(+),基本类型将自动转化为字符串类型。...byte和short涉及到赋值都会转换,但是特殊运送不会 String类 null可以赋值给任何引用类型(类、接口、数组变量,用以表示这个引用类型变量中保存地址空。...布尔类型不可以和其他类型进行转换 1.8.4比较运算符 1.8.5 逻辑运算符 ①“&”和“&&”区别: &,左边无论真假,右边都进行运算; 双&,如果左边真,右边参与运算,如果左边

61910

重庆师范大学c语言考试系统题库,2018年重庆师范大学计算机与信息科学学院820计算机基础综合之C程序设计考研核心题库…

【答案】C 【解析】定义长度3struct 数组a , a 中每个元素next 是指向下一个元素,实际上数组a 元素构成了一条链表,指针p 指向链表头部 项返回都是 5。...以下选项中,1表达式是( )。 【答案】C 【解析】ASCII 码表 ,选C 。 5. 以下涉及字符串数组、字符指针程序段,不会产生编译错误是( )。 A. B. C. D....【答案】A 【解析】将字符指针变量初始化为一个字符串有两种方式,一种通过赋值运算使一个字符指针指向一个字符串常量: 并且初始化为一个字符串首地址:个变量,所以不能给一个数组名赋值, 如 A 选项正确。...数组名是一个地址常量,而字符指针变量是一针变量是可以改变;(3....数组不可以直接赋值字符 串 . 合法,故D 选项错误。 不合法,只有在数组初始化时可以直接赋值, 如 合法,并且定义数组必须指定数组长度, 不 6. 有以下程序: 程序运行结果是( )。

38620

C Primer Plus(七)

// We, 0x100000f61, c return 0; } 字符串数组初始化 定义字符串数组,必须让编译器知道需要多少空间。...为了容纳空字符,在指定数组大小时,要确保数组元素个数至少比字符串长度多 1。所有未被使用元素都被自动初始化为 0(即空字符,不是数字字符 0)。 通常,让编译器确定数组大小很方便。...前面介绍过,省略数组初始化声明中大小编译器会自动计算数组大小: const char m2[] = "If you can't think of anything, fake it...."; 让编译器确定初始化字符数组大小很合理。因为处理字符串函数通常都不知道数组大小,这些函数通过查找字符串末尾空字符确定字符串在何处结束。 让编译器计算数组大小只能用在初始数组。...每个元素被初始化为字符串字面量对应字符。通常,字符串都作为可执行文件一部分储存在数据段中。当把程序载入内存,也载入了程序中字符串。字符串储存在静态存储区(static memory)中。

65410

JVM 类加载机制

准备:静态变量分配内存,并将其初始化为默认。准备阶段是正式类变量分配内存并设置类变量初始阶段,这些内存都将在方法区中分配。...【2】对于同时被 static和 final修饰常量,必须在声明时候就为其显式地赋值,否则编译不通过;而只被 final修饰常量则既可以在声明时显式地其赋值,也可以在类初始化时显式地其赋值,...【4】如果在数组初始化时没有对数组各元素赋值,那么其中元素将根据对应数据类型而被赋予默认。...我们可以理解 static final常量编译期就将其结果放入了调用它常量池中。 解析:把类中符号引用转换为直接引用。...在 Java中对类变量进行初始设定有两种方式: 【1】声明类变量指定初始; 【2】使用静态代码块类变量指定初始; JVM初始化步骤: 【1】假如这个类还没有被加载和连接,则程序先加载并连接该类

47220
领券