但是,为什么 Sun 公司一直没有删除「基本数据类型」,而是为它增设了具有面向对象设计思想的「包装类型」呢?...基本类型与对象类型最大的不同点在于,基本类型基于数值,对象类型基于引用。 ? 基本类型的变量在栈的局部变量表中直接存储的具体数值,而对象类型的变量则存储的堆中引用。...对象类型则截然不同,变量实际上是某个类的实例,可以拥有属性方法等信息,不再单一的存储数值,可以提供各种各样对数值的操作方法,但代价就是牺牲一些性能并占用更多的内存空间。...第二种间接一点,允许你传入一个数字的字符串,Integer 内部会尝试着将字符串向整型数值进行转换,如果成功则初始化 value,否则将抛出一个异常。...首先,如果 i 是一个负数,那么变量 sign 的值给它赋为「-」,标识它是一个负数,并将它取正,毕竟正数更方便我们操作。
sizeof乃C/C++中的一个操作符(operator)是也,简单的说其作用就是返回一个对象或者类型所占的内存字节数。...这里函数參数a3已不再是数组类型,而是蜕变成指针,相当于char* a3,为什么?细致想想就不难明确,我们调用函数foo1时,程序会在栈上分配一个大小为3的数组吗?不会!...}; 定义上面的变量后,加上断点,执行程序,观察s1所在的内存,你发现了什么?...试想一个“不占空间”的变量怎样被取地址、两个不同的“空结构体”变量又怎样得以区分呢?于是,“空结构体”变量也得被存储,这样编译器也就仅仅能为其分配一个字节的空间用于占位了。...,但其位宽之和大于类型的sizeof大小,则后面的字段将从新的存储单元開始,其偏移量为其类型大小的整数倍; 3) 假设相邻的位域字段的类型不同,则各编译器的详细实现有差异,VC6採取不压缩方式,Dev-C
在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。至于typedef有什么微妙之处,请你接着看下面对几个问题的具体阐述。...因为如此原因,在许多C语言编程规范中提到使用#define定义时,如果定义中包含表达式,必须使用括号,则上述定义应该如下定义才对:#define f(x) (x*x)当然,如果你使用typedef就没有这样的问题...在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。至于typedef有什么微妙之处,请你接着看下面对几个问题的具体阐述。...因为如此原因,在许多C语言编程规范中提到使用#define定义时,如果定义中包含表达式,必须使用括号,则上述定义应该如下定义才对:#define f(x) (x*x)当然,如果你使用typedef就没有这样的问题...因为如此原因,在许多C语言编程规范中提到使用#define定义时,如果定义中包含表达式,必须使用括号,则上述定义应该如下定义才对:#define f(x) (x*x)当然,如果你使用typedef就没有这样的问题
int[10],但如果把array 看做指针的话,它指向数组的第0 个单元,类型是int* 所指向的类型是数组单元的类型即int。...数组的数组名的问题 声明了一个数组TYPE array[n],则数组名称array 就有了两重含义: 第一,它代表整个数组,它的类型是TYPE[n]; 第二,它是一个常量指针,该指针的类型是TYPE...*,该指针指向的类型是TYPE,也就是数组单元的类型,该指针指向的内存区就是数组第0 号单元,该指针自己占有单独的内存区,注意它和数组第0 号单元占据的内存区是不同的。...,而不是别的什么类型的大小。...虽然我在我的MSVC++6.0 上调式过上述代码,但是要知道,这样使用pstr 来访问结构成员是不正规的,为了说明为什么不正规,让我们看看怎样通过指针来访问数组的各个单元: (将结构体换成数组) 例:
如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。...同理,short 类型的地址为0x00000002,那么它就是自然对齐的。char 类型就比较 “随意” 了,因为它本身长度就是 1 个字节。...看到上面的第二张图,有的人可能会有疑问,为什么 short 不是紧挨着 char 呢?其实这个原因在上面已经给出了答案——自然对齐。为此,我们可以创建结构体验证自然对齐的规则。...实验很简单,在原本 short 类型变量前后添加 char 类型,看结果是怎样的。...指针大小 在64位系统中,不管什么样的基类型,系统指针给指针变量分配的内存空间都是8字节,在C语言中,指针变量的“基类型”仅用来指定该指针变量可以指向的变量类型,并没有其他意思。
如果发生上溢,函数返回 LONGMAX或LONGMIN。如果不能执行转换,则返回0。 strtoul 将字符串 nptr 转换成 unsignedlong 型数据。...如果发生上溢,函数返回 ULONGMAX。如果不能执行转换, 则返回0。 ...3.字符串操作函数: strcat 将 strSource 添加到 strDestination,并用一个空字符结束该结果字符串。...如果被格式化和存储的字符串与目的字符串之间有重叠,则此函数的执行效果是不确定的。...system 函数原型:int system(const char*command) 参数:command 要执行的命令。把command 传给命令解释器,像执行操作系统命令那样执行该字符串。
这里就用到了该操作符。 我们还可以用另外一个操作符。点操作符,左边就为结构体,右边为变量。...所以如果用点操作符,则变为 return (int)(*(stu*)e1.weight-*(stu*)e2.weight) .只要返回值正确,用哪个都行。...而字符串大小比较是先拿第一个字符的ascall码值进行比较,谁ascall码值大谁字符串大,如果第一个相等则拿第二个进行比较,依次下去(如果到最后都相同,则相等,也就是两个字符串是一样的) 在下面这篇文章中有更多关于字符串大小比较的细节...之后就通过该库函数内部的代码操作从而比较出来大小。 返回值大于0,则第一个比第二个大。同理小则小,为0则相等 其返回值跟我们自定义函数返回值一样。...但是虽然不同,我们至少也要了解到底该如何利用这四个参数去实现任意类型(不管其用什么方法),毕竟了解的越多,更能提升我们思维能力。
以后,每遇到一个指针,都应该问问:这个指针的类型是什么?指针指的类型是什么?该指针指向了哪里?(重点注意) 4 指针本身所占据的内存区 指针本身占了多大的内存?...正解: ptr 的类型是char **,指向的类型是一个char *类型,该指向的地址就是p的地址(&p),当执行ptr++;时,会使指针加一个 sizeof(char*),即&p+4;那*(&p+...因此*array 等于0 就一点也不奇怪了。同理,array+3 是一个指向数组第3 个单元的指针,所以*(array+3)等于3。其它依此类推。 ...虽然我在我的MSVC++6.0 上调式过上述代码,但是要知道,这样使用pstr 来访问结构成员是不正规的,为了说明为什么 不正规,让我们看看怎样通过指针来访问数组的各个单元: (将结构体换成数组)...让我们再来看一例: 例十九: char a; int *ptr=&a; ptr++; *ptr=115; 该例子完全可以通过编译,并能执行。但是看到没有?
一般地,int整型的位数等于数据总线的宽度,指针的位数等于地址总线的宽度。 计算机的基本访问单元 学过C语言的人都知道,C语言的基本数据类型中,就属char的位数最小,是8位。...当期望你调用的函数能够使用你的某些方式去操作的时候,回调函数就很有用,比如,你期望某个排序函数在比较的时候,能够使用你定义的比较方法去比较。 有过较深入的C编程经验的人应该都接触过。...如果const 后面是一个类型,则跳过最近的原子类型,修饰后面的数据。...(原子类型是不可再分割的类型,如int, short , char,以及typedef包装后的类型) 如果const后面就是一个数据,则直接修饰这个数据。...如果被访问的数据被拷贝了,在每个单元中都有自己的一份,对目标数据的操作相互不受影响,则叫做深拷贝。 ? 附加知识 指针和引用这个2个名词的区别。他们本质上来说是同样的东西。
如果没有找到子串strSearch, 则返回NULL. 如果子串strSearch为空串, 函数返回string值. ...如果两个字符串参数不含相同字符, 则返回NULL值. ...比较过程中, 任何一个字符串的长度小于count, 则count将被较短的字符串的长度取代. 此时如果两串前面的字符都相等, 则较短的串要小. ...c++概念字符串操作 一、char_traits 字符特征类 1)意义:包装特定串元素的通用行为界面,以便容器实现时依据特征信息而执行特定行为 2)定义了通用类型名 typedef _Elem...+ cnt2) 执行比较 返回 -1, 0, 1 作为小于、等于和大于的比较结果。
字符分类函数 C语言中有一系列的函数是对字符进行分类的,就是对判断一个字符属于什么类型的字符,这类字符函数的使用都要包含一个头文件ctype.h。...如果参数c是小写字母,则返回非零值(真);否则返回0(假)。 【示例】将字符串中的小写字母转大写,其他字符不变。...那么,strcpy的实现原理是怎样的呢?...这个函数执行字符的二进制比较。 这个函数开始比较每个字符串的第一个字符。如果它们彼此相等,则继续执行以下对,直到字符不同或达到终止空字符为止。...标准规定: ◦ 第⼀个字符串大于第⼆个字符串,则返回大于0的数字 ◦ 第⼀个字符串等于第⼆个字符串,则返回0 ◦ 第⼀个字符串小于第⼆个字符串,则返回小于0的数字 ◦ 那么如何判断两个字符串?
可看做是不是: 引用 instanceof 类型 该引用的实际类型 是不是 某类型 比较两个对象的实际类型是不是相等: 1....,另开一个实现类 缺点: 代码可读性差 集合框架: 为什么使用集合: 数组的扩容、插入、删除操作十分繁琐 集合的类型: Collection 接口 -->...如果两个对象的hashCode相同,就使用 equals() 方法进行比较, 去掉重复元素,不重复的挂到该hashCode对应数组位置中的链表里 3....则结束循环,如果索引小于集合长度, 则通过next()取出指针指向的集合内对象地址,执行循环体。...在next()中进行集合长度及变化的安全监测,如果索引大于集合长度,则说明在 上一次循环的循环体中,出现了修改集合长度的操作,则直接抛出 并发修改异常;集合之中有一个成员变量modCount
如果不能执行转换,则返回0。 ...如果有参数 argument 跟随 format 字符串,该 format 字符串必须包含确定该参数输出格式的格式符。 返回值:返回输出的字符个数:如果出现错误,则返回一个负数。 ...所需头文件: 返回值:如果该流成功关闭, fclose 返回0。如果出错,则返回 EOF。 功能:关闭流。 ...如果有参数 argument 跟随 format 字符串,该 format 字符串必须包含确定该参数输出格式的格式符。 返回值:返回输出的字符个数,如果出现错误则返回一个负数。 ...所需头文件: 功能: 把 command 传给命令解释器,像执行操作系统命令那样执行该字符串。 返回值: 返回该命令解释器所返回的值,且当该命令解释器返回0时它返回0。
但在实际执行时,输出时可能不仅只是HELLO。 char myStr[5]= {'H','E','L','L','O'}; cout<<myStr<<endl; 为什么会输出更多信息?...char myStr[6]= {'H','E','L','L','O','\0'}; cout<<myStr<<endl; //输出结果:HELLO 执行下面的代码,查看输出结果,想想为什么输出结果是...这里有一个问题,如果实际的字符个数大于数组声明的长度,会出现什么情况?...如果返回值为 等于 0,则names 等于 address。 如果返回值大于 0,则names 大于 address。...如果没有查找到,则返回null。
scala> val myBoolean : Boolean = true myBoolean: Boolean = true 类型之间的转换 隐式转换 该转换是指数据从低精度往高精度转换的过程,通常在做数学运算时便可以实现转换...1).toChar // 将Int型的66强制转换为Char类型 res3: Char = B scala> (23.5/5).toInt // 将Double类型强制转换为Int类型 res5...: Int = 4 Scala中的运算符 比较运算符 通过比较运算符,可以得到Boolean类型的值。...= 判断运算符左侧的值是否不等于右侧的值 逻辑运算符 借助于逻辑运算符,将多个比较运算符进行连接。...之后再对编译文件执行scala命令。
(7)sizeof可以对函数调用求大小,并且求得的大小等于返回类型的大小,但是不执行函数体! (8)sizeof求得的结构体(及其对象)的大小并不等于各个数据成员对象的大小之和!...而表达式ch=ch+num;的结果的类型是char,记住虽然在计算ch+num时,结果为int,但是当把结果赋值给ch时又进行了类型转换,因此表达式的最终类型还是char,所以n2等于1。...特性7:sizeof可以对函数调用求大小,并且求得的大小等于返回类型的大小,但是不执行函数体!...这里很类似,sizeof的操作对象是函数调用时,它不执行函数体!为此,建议大家不要把函数体放在sizeof后面的括号里,这样容易让人误以为函数执行了,其实它根本没执行。...我们知道某个类型的大小确定了该类型所能定义的变量的范围,比如sizeof(char)为1byte,而1byte等于8bit,所以char类型的变量范围是-128——127,或者0——255(unsigned
字符函数 字符分类函数 字符分类函数有如下: 因为每个函数的使用方式基本相同,我们就举一个来简单说明: 当我们使用上面的函数时,我们需用引用头文件,如果函数内为真则返回不等于0的数,...如果为假,则返回0。...如下图,如果参数是小写则转换成大写,如果是大写,则不变。 内存函数 memcpy函数 memcpy函数跟strcpy函数有相似之处,不过memcpy可以拷贝任何类型。...memcmp函数 memcmp函数与strcmp函数类似,不过strcmp函数只能进行字符串的比较,memcmp是内存块的比较,可以比较任意类型的数据。...如上图,我们比较大小的时候,不能单纯比较数字,而要看他们在内存中是怎样的,这样才能得出正确结果。
领取专属 10元无门槛券
手把手带您无忧上云