从事软件开发多年对于C/C++用的比较多,可以明确说这两种编程语言也是支持跨平台,肯定还是有很多人问什么是真正意义上的跨平台,所谓的跨平台就是同一套代码在不同的操作系统都能直接去运行,这里面涉及到一个很重要的问题...,在java这门编程语言刚开始流行的时候就提到了跨平台的功能,在windows上运行的jar包直接放在linux上也能直接去运行,单纯从C/C++角度出发也是能够实现这种功能的,因为其语法实现是相同的。...,在具体软件的核心架构上代码是一致的,和平台相关的代码还是需要单独去实现,就拿简单的线程的实现,不同的操作系统的接口就存在很大的差异,所以完全意义上的跨平台方面距离高级编程语言还是存在差异。...编译器其实就是一种转化工具,将程序转化成能够运行的二进制文件,一般而言C/C++编译器是可以通用的,不同的操作系统使用不用的编译器底层。 ?...,特别是在入门的时候显得困难一些,但是入门之后会更加有意思。
,全局变量就是在静态区的,staticGlobalVar是属于静态的变量的,这个肯定是在静态区的; (2)staticVar是属于局部的静态变量,无论是静态的局部变量还是全局的静态变量,都是在静态区的;...num1本质都是一样的,只不过num1指定了数组的大小空间是容纳的10个数据,但是这个char2虽然没有指定数组里面的元素的个数,但是这个数组同样是局部的,位于栈区;实际上char2右边有几个字符加上斜杠...指针同样是局部的,位于栈区; (7)请看下面的图片pchar3和ptr1都在栈区,但是其指向的数据不在栈区,pchar3指向的数据位于常量区域,属于常量字符串;ptr1指向的区域在堆区,因为ptr1属于是动态开辟的空间...,编译器无法识别这个栈里面的数据类型,这个时候我们就需要在stack后面加上尖括号里面标明数据的类型,这个就是一个类模版; (4)类型的不匹配问题 我们这里在调用函数的时候,就传递进去两个不同的数据类型的数值...-----------------强制类型转换 第二种就是在add函数后面加上尖括号,括号里面的数据类型就是模版使用的数据类型;
引言上篇我们了解 Go语言的基本数据类型,现在开始介绍数组类型。主要如下:主要内容在 Go 语言中,数组被称为 Array,就是一个由若干相同类型的元素组成的序列。1....,所以可以使用数组构造出更多样的数据结构,而不只是把它当做包含若干相同类型元素的有序列表。...方括号之间的整数表示数组值的长度,它必须大于或等于花括号中元素值的实际数量。...在 Go 语言中,一个数组即是一个值。数组类型的变量即代表了整个数组,不像C语言中的数组代表一个指向数组的第一个元素值的指针。...同样索引值不在有效范围内的时候也一样。总结本篇介绍了 Go 语言的数组类型,下篇将介绍 Go 语言的切片类型,敬请期待!
声明变量时用任何一个都可以,在c++中也是如此。但是你要注意的是这个在c++中如果写掉了typedef关键字,那么aaa,bbb,ccc将是截然不同的三个对象。...[知识点] 结构也是一种数据类型, 可以使用结构变量, 因此, 象其它 类型的变量一样, 在使用结构变量时要先对其定义。...跳出这个括号,看右边,又遇到圆括号,说明func数组的元素是函数类型的指针,它指向的函数具有int*类型的形参,返回值类型为int。...const pStr p2和const long x本质上没有区别,都是对变量进行只读限制,只不过此处变量p2的数据类型是我们自己定义的而不是系统固有类型而已。...这并是说 typedef 会真正影响对象的存储特性;它只是说在语句构成上,typedef 声明看起来象 static,extern 等类型的变量声明。
1.new用法说明 (1)在C语言阶段,我们无论是为数组开辟空间,还是为单个的内置数据类型的数据开辟空间,都是使用malloc,realloc,calloc这些函数,但是C++里面引入了类和对象,这个时候...显然,数组和单个数据类型的不同就在于数组是在delete后面加上了方括号来进行标识; (5)类创建的对象的释放 如果仅仅是为了方便代码的简洁性,祖师爷肯定不会发明new这个东西出来,任何一个事物的出现必然是可以解决一类问题的...2.new/delete在栈里面的运用 (1)我们使用栈举例,可以更好地理解new /delete的用法,我们都知道对于一个栈而言,是有一个数组,一个变量记录数组的容量,一个变量用来记录数组里面的元素的个数...,也就可以理解为两者实现的效果是一样的; 我们在进行显示调用的时候都是new(定义的变量)类的名字; 实际上这个定位new这个语法适合内存池结合使用的,我们现在了解即可,因为我们一般不会这样使用,内存池里面的呢内存不会进行初始化的操作...,但是delete和new都是操作符; (3)malloc不会进行初始化的操作,但是我们的new操作符可以进行初始化,初始化的方法就是对于单个的变量,我们可以使用小括号进行初始化,对于这个数组里面的多个元素的情况
由于 malloc/free 是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于 malloc/free 。...C++ 默认的 new/delete 操作符内部,其实也调用了 malloc/free 这两个函数; 使用方法上的区别 1. new能够按照变量类型自动地分配所需空间长度,不必使用宏sizeof。...对于非内部数据类型的对象而言,new 在创建动态对象的同时完成了初始化工作。如果对象有多个构造函数,那么new 的语句也可以有多种形式。 如果用new 创建对象数组,那么只能使用对象的无参数构造函数。...由于,malloc/free是库函数而不是运算符,不在编译器控制权限之内,也就不能执行构造函数和析构函数,不能够把执行构造函数和析构函数的任务强加于malloc/free。...或许你会问,既然new/delete的功能完全可以实现malloc/free的功能,为什么C++中不把malloc/free淘汰掉呢,这可能涉及到一个兼容性问题,C++程序要经常调用C函数,而C语言中只能用
当数据占用的内存较大时,减少数据的拷贝可以有效提高程序的性能。在C中指针是完成这一目的的标准数据结构,而C++引入了安全性更高的引用类型。...所以在C++中若传递的数据仅仅只读,const string&成了C++的天然的方式。...实际上我们本意并不是要改变原字符串,为什么不在原字符串基础上返回呢? 在C++17中引入了string_view,能很好的解决以上两个问题。...Rust专门有套机制在编译时分析变量的生命期,保证borrow的资源在使用期间不会被释放,但C++没有这样的检查,需要人工保证。...C++标准并没有对这个类型做太多的约束,这引来的问题是我们可以像平常的变量一样以多种方式使用它,如,可以传参,可以作为函数返回值,可以做普遍变量,甚至我们可以放到容器里。
参考链接: 在C++编程中将数组传递给函数 C++基础之数组 数组(Arrays) 是在内存中连续存储的一组同种数据类型的元素(变量),每一数组有一个唯一名称,通过在名称后面加索引(index)的方式可以引用它的每一个元素...因此 ,如果全局范围内我们声明: int billy [5]; 那么billy 中的每一个元素将会被初始化为0: 另外,我们还可以在声明一个变量的同时把初始值付给数组中的每一个元素,这个赋值用花括号...因为这是一种信息的重复,因此C++允许在这种情况下数组[ ]中为空白,而数组的长度将有后面花括号{}中数值的个数来决定,如下例所示。 ...在C++ 中对数组使用超出范围的index是合法的,这就会产生问题,因为它不会产生编译错误而不易被察觉,但是在运行时会产生意想不到的结果,甚至导致严重运行错误。...它们的实际作用是一样的,但传递地址更快速有效。 要定义数组为参数,我们只需要在声明函数的时候指明参数数组的基本数据类型,一个标识后面再跟一对空括号[]就可以了。
基本数据类型 java和C/C++一样,是静态类型语言。因此,必须声明变量的数据类型。java支持8中的基本数据类型。...或者更高版本上,基本数据类型都存在一个对应的包装器,它们有一个SIZE属性来标识类型占据了多少位。...这是因为,原始类型是语言中内置的特殊数据类型,它们不是从类创建的对象。 数组 数组是一个容器对象,它包含固定数量的单一类型的值。数组的长度是在创建数组时确定的。创建后,它的长度是固定的。...多维数组 在Java中,多维数组是其元素本身就是数组的数组。这与C/C++中的数组不同。这样做的结果是允许行的长度不同。 String[][] names = { {"Mr.", "Mrs....参数是为方法提供额外信息的变量;局部变量和参数总是被归类为“变量”(而不是“字段”)。 参考资料:Java8官方教程
数组声明的三个特点: 存储在每个元素中的值的类型 数组名 数组中的元素数 C++中可以通过修改简单变量的声明,添加中括号(其中包含元素数目)来完成数组声明。...4.如果初始化为{1}而不是{0},则第一个元素被设置为1,其他元素都被设置为0. 5.如果初始化数组方括号内([])为空,C++编译器将计算元素个数。...在C++中列表初始化就增加了一些功能: 初始化数组时,可省略等号(=) double earnings[4] {1.2e4,1.6e4,1.1e4,1.7e4}; 可不在大括号内包含任何东西,这会将所元素都设置为零...strlen()只计算可见的字符,而不把空字符计算在内。 sizeof() 运算符 指出变量或数据类型的字节大小。 可用于获取类、结构、共用体和其他用户自定义数据类型的大小。...8.4 C++管理数据内存的方式 自动存储 在函数内部定义的常规变量使用自动存储空间,称为自动变量。只在特定函数被执行时存在。 自动变量时一个局部变量,作用域为包含它的代码块。
由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。...如果你在用delete时没用括号,delete就会认为指向的是单个对象,否则,它就会认为指向的是一个数组。 3.C++有哪些性质(面向对象特点) 封装,继承和多态。...C++的多态性具体体现在运行和编译两个方面: 在程序运行时的多态性通过继承和虚函数来体现; 在程序编译时多态性体现在函数和运算符的重载上; 虚函数:在基类中冠以关键字 virtual 的成员函数。...而引用更容易使用,更清晰。 9.在什么时候需要使用“常引用”? 如果既要利用引用提高程序的效率,又要保护传递给函数的数据不在函数中被改变,就应使用常引用。...数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。指针可以随时指向任意类型的内存块。
3、关于大括号初始化问题 struct在C语言中: 在C语言中,我们知道struct中是一种数据类型,只能定义数据成员,不能定义函数,这是因为C语言是面向过程的,面向过程认为数据和操作是分开的,所以C语言中的...struct可以直接使用大括号对所有数据成员进行初始化 例如: 1 在C++中class和struct的区别: 在C++中对struct的功能进行了扩展,struct可以被继承,可以包含成员函数,也可以实现多态...,当用大括号对其进行初始化需要注意: 当struct和class中都定义了构造函数,就不能使用大括号对其进行初始化 若没有定义构造函数,struct可以使用{ }进行初始化,而只有当class的所有数据成员及函数为...为什么是大于等于而不是正好相等呢?...基于上述两点,可以说用sizeof对类名操作,得到的结果是该类的对象在存储器中所占据的字节大小,由于静态成员变量不在对象中存储,因此这个结果等于各非静态数据成员(不包括成员函数)的总和加上编译器额外增加的字节
由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。...如果你在用delete时没用括号,delete就会认为指向的是单个对象,否则,它就会认为指向的是一个数组。 3.C++有哪些性质(面向对象特点) 封装,继承和多态。...C++的多态性具体体现在运行和编译两个方面:在程序运行时的多态性通过继承和虚函数来体现; 在程序编译时多态性体现在函数和运算符的重载上; 虚函数:在基类中冠以关键字 virtual 的成员函数。...而引用更容易使用,更清晰。 9.在什么时候需要使用“常引用”? 如果既要利用引用提高程序的效率,又要保护传递给函数的数据不在函数中被改变,就应使用常引用。...数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。指针可以随时指向任意类型的内存块。
(2)long int是否占8字节,与编译器的实现有关,Visual C++在VS2012中使用的编译器是cl.exe,在64bits的Windows下仍然将long编译为4字节,要想使用8字节长整型,...3.sizeof计算指针变量 指针是C/C++的灵魂,它记录了一个对象的地址。指针变量的位宽等于机器字长,机器字长由CPU寄存器位数决定。...在32位系统中,一个指针变量的返回值为4字节,64位系统中指针变量的sizeof结果为8字节。...那为什么在本机64bits系统下,指针变量大小仍然是4个字节,因为使用32位编译器编译得到程序是32位,故指针大小是4字节,可自行修改编译器版本,不再赘述。...仔细想想就不难明白,我们调用函数foo1时,程序会在栈上分配一个大小为3的数组吗?不会!
,其实计算机每一种规则都是为了简化过程,减少资源的浪费) 2、数组指针变量 ①数组指针变量的定义 数组指针变量是指针而不是数组,其中存放的是数组的地址,用以指向数组 数组指针变量的形式: int (*...p)[5]; 前面是数据类型:int,char,short等,是由数组类型来决定的,后边的 [ ] 里面的数字自然就是数组中有几个元素我们把 * 和 p 用括号括起来,表示这是一个指针,如果不括起来的话...这里最前边也是数据类型,为函数返回数据的类型,括号里为变量的类型以及数量,有几个变量就写几个其相对应的数据类型将 * 与 pf 在括号里括起来原因与上边数组指针变量相同,都是为了让 * 与 pf 结合...顾名思义,就是储存函数指针的数组 这样来定义: int (*parr1[5])(); 最前面自然是返回的数据类型,最后的括号里是函数的输入数据,[5]代表数组中有5个函数指针用括号把*parr1[...]括起来,表示先结合 类型为 int (*)() 三、二维数组传参的本质 1、二维数组的传参本质 二维数组传参本质上也是传递了地址,传递的是第一行这个一维数组的地址 通过以前学的内容,我们可以实现一维数组打印用指针来实现
数据类型 数据类型存在的意义:给变量分配合适的内存空间(避免造成资源浪费) 整型 浮点型 值得注意的是,在没有主动设置的情况下,c++默认显示6位小数: float f1 = 3.1415926...逻辑运算符 注意: 在C++中。...int)&a[0] <<endl ; 这里值得注意的是:有些电脑上直接将十六进制强制转换成十进制会报错 原因是,int类型是占4个字节,而c++中int类型数组地址是12位十进制数,所以int的四个字节是不够的...简单来说,就是地址传递是通过地址进行参数的访问,而值传递是开辟另外的空间进行操作。 结构体: 结构体属于用户自定义的数据类型,允许用户储存不同类型的数据类型。...变量名 = { 属性值列表 }; 在定义结构体时顺便创建变量 结构体数组 基本语法:struct + 结构体名 + 数组名[ 元素个数 ] = { {属性列表1} ,{属性列表2},…… }; 结构体指针
运算符 进行 动态内存的管理 ; 不建议在 C++ 中使用 malloc 和 free 进行动态内存管理 ; 使用 new 和 delete 运算符 可以为如下类型的变量 动态分配内存 : 类对象 基础类型...[ 数字 ] // 创建数组 , 中括号中是 数组元素个数 小括号 中的 常量值 是可以省略的 ; 中括号 表示的是为 数组类型 分配内存空间 , 中括号内是 数组元素个数 ; 2、语法简单示例 new...); 创建 普通数组类型 变量 : 堆内存 中 创建 int 数组类型 存储空间 , 返回 指向该内存空间 的 指针 ( 空间地址 ) , 中括号中是 数组元素个数 ; int* ptr = new int...[8]; 创建 普通二维数组类型 变量 : 堆内存 中 创建 int 二维数组类型 存储空间 , 返回 指向该内存空间 的 指针 ( 空间地址 ) , 中括号中是 数组元素个数 ; int* ptr =...在 C++ 语言中 , 使用 new 基础数据类型[数组元素个数] 申请内存 , int* array2 = new int[2]; 使用 delete(指针变量) 释放内存 ; delete(array2
在 C/C++ 中,sizeof() 是一个判断数据类型或者表达式长度的运算符。...在 32 位系统中,一个指针变量的返回值为 4 字节, 64 位系统中指针变量的 sizeof 结果为 8 字节。...而每次声明了类 A 的一个对象的时候,为该对象在堆上,根据对象的大小分配内存。...sizeof 的参数可以是数据的类型,也可以是变量,而 strlen 只能以结尾 编译器在编译时就计算出了 sizeof 的结果,而 strlen 函数必须在运行时才能计算出来。...并且 sizeof 计算的是数据类型占内存的大小,而 strlen 计算的是字符串实际的长度。 数组做 sizeof 的参数不退化,传递给 strlen 就退化为指针了。
Python中的常量可以分为四类: 数字常量 字符串常量 布尔常量 特殊常量——None 而Python中的变量与C/C++中的变量不一样的是,在Python中变量在定义时是不需要指明数据类型的,变量的数据类型会根据定义变量时的初始值来进行确定...在C/C++中,常量字符串中的字符是无法在后续的运行中进行更改的,而字符数组中的值则是可以在后续的运行中进行修改,如下所示: 可以看到,此时我们可以完成对字符数组中的元素的修改,但是无法修改常量字符串中的元素...在Python中创建的变量就属于动态数据类型的变量,如下所示: 从这里的测试结果不难发现,在Python中变量的数据类型、取值范围会随着值的不同而发生变化。...在C/C++中,整型和指针类型都是能够进行+-整数的类型,因此C/C++可以实现字符+整数,字符串+整数,如下所示: 在C/C++中,字符+-整数实际上是字符对应的ASCII码值+-整数;字符串+-整数实际上是字符串的地址进行...: 因此,在Python中,舍弃了C/C++中的字符类型,而重新创建了一个新的数据类型——字符串类型。
C++是一种强类型语言,它要求程序员在编程时要定义每一个变量的类型,这就是C++数据类型的作用。C++数据类型包括内置数据类型和用户自定义数据类型。...return 0; } 二、数组类型 数组是C++中的一种自定义数据类型,可以存储相同类型的多个元素。...数组的定义方式是在类型名后紧跟方括号,其中方括号内指定数组的大小。我们可以使用下标运算符来访问数组中的元素。...结构体的定义方式是在struct关键字后指定结构体名,并在大括号内定义结构体成员。我们可以使用点运算符来访问结构体成员。...了解C++的数据类型,有助于提高我们的编程效率和代码质量。在实际开发中,要选择合适的数据类型,避免使用不必要的数据类型,避免数据溢出和精度丢失。