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

基本数据类型及其包装类(一)

但是,为什么 Sun 公司一直没有删除「基本数据类型」,而是为它增设了具有面向对象设计思想的「包装类型」呢?...基本类型与对象类型最大的不同点在于,基本类型基于数值,对象类型基于引用。 ? 基本类型的变量在栈的局部变量表中直接存储的具体数值,而对象类型的变量存储的堆中引用。...对象类型截然不同,变量实际上是某个类的实例,可以拥有属性方法等信息,不再单一的存储数值,可以提供各种各样对数值的操作方法,但代价就是牺牲一些性能并占用更多的内存空间。...第二种间接一点,允许你传入一个数字的字符串,Integer 内部会尝试着将字符串向整型数值进行转换,如果成功初始化 value,否则将抛出一个异常。...首先,如果 i 是一个负数,那么变量 sign 的值给它赋为「-」,标识它是一个负数,并将它取正,毕竟正数更方便我们操作

1.2K50

sizeof,终极无惑(上)

sizeof乃C/C++中的一个操作符(operator)是也,简单的说其作用就是返回一个对象或者类型所占的内存字节数。...这里函数參数a3已不再是数组类型,而是蜕变成指针,相当于char* a3,为什么?细致想想就不难明确,我们调用函数foo1时,程序会在栈上分配一个大小为3的数组吗?不会!...}; 定义上面的变量后,加上断点,执行程序,观察s1所在的内存,你发现了什么?...试想一个“不占空间”的变量怎样被取地址、两个不同的“空结构体”变量又怎样得以区分呢?于是,“空结构体”变量也得被存储,这样编译器也就仅仅能为其分配一个字节的空间用于占位了。...,但其位宽之和大于类型的sizeof大小,后面的字段将从新的存储单元開始,其偏移量为其类型大小的整数倍; 3) 假设相邻的位域字段的类型不同,各编译器的详细实现有差异,VC6採取不压缩方式,Dev-C

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

告诉你所不知道的typedef

在编程中使用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就没有这样的问题

89210

10分钟,掌握90%的人都不会的指针算术结构!

int[10],但如果把array 看做指针的话,它指向数组的第0 个单元,类型是int* 所指向的类型是数组单元的类型即int。...数组的数组名的问题 声明了一个数组TYPE array[n],数组名称array 就有了两重含义: 第一,它代表整个数组,它的类型是TYPE[n]; 第二,它是一个常量指针,指针的类型是TYPE...*,指针指向的类型是TYPE,也就是数组单元的类型指针指向的内存区就是数组第0 号单元,指针自己占有单独的内存区,注意它和数组第0 号单元占据的内存区是不同的。...,而不是别的什么类型的大小。...虽然我在我的MSVC++6.0 上调式过上述代码,但是要知道,这样使用pstr 来访问结构成员是不正规的,为了说明为什么不正规,让我们看看怎样通过指针来访问数组的各个单元: (将结构体换成数组) 例:

39310

CC++面试必备知识

如果没有volatile关键字,编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。...同理,short 类型的地址为0x00000002,那么它就是自然对齐的。char 类型比较 “随意” 了,因为它本身长度就是 1 个字节。...看到上面的第二张图,有的人可能会有疑问,为什么 short 不是紧挨着 char 呢?其实这个原因在上面已经给出了答案——自然对齐。为此,我们可以创建结构体验证自然对齐的规则。...实验很简单,在原本 short 类型变量前后添加 char 类型,看结果是怎样的。...指针大小 在64位系统中,不管什么样的基类型,系统指针给指针变量分配的内存空间都是8字节,在C语言中,指针变量的“基类型”仅用来指定指针变量可以指向的变量类型,并没有其他意思。

18630

指针(4)

这里就用到了操作符。 我们还可以用另外一个操作符。点操作符,左边就为结构体,右边为变量。...所以如果用点操作符,变为 return (int)(*(stu*)e1.weight-*(stu*)e2.weight) .只要返回值正确,用哪个都行。...而字符串大小比较是先拿第一个字符的ascall码值进行比较,谁ascall码值大谁字符串大,如果第一个相等拿第二个进行比较,依次下去(如果到最后都相同,相等,也就是两个字符串是一样的) 在下面这篇文章中有更多关于字符串大小比较的细节...之后就通过库函数内部的代码操作从而比较出来大小。 返回值大于0,第一个比第二个大。同理小则小,为0相等 其返回值跟我们自定义函数返回值一样。...但是虽然不同,我们至少也要了解到底如何利用这四个参数去实现任意类型(不管其用什么方法),毕竟了解的越多,更能提升我们思维能力。

5810

最容易出错的C语言指针

以后,每遇到一个指针,都应该问问:这个指针的类型什么?指针指的类型什么?指针指向了哪里?(重点注意)   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;   例子完全可以通过编译,并能执行。但是看到没有?

1.1K40

最容易出错的C语言指针

以后,每遇到一个指针,都应该问问:这个指针的类型什么?指针指的类型什么?指针指向了哪里?(重点注意)   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;   例子完全可以通过编译,并能执行。但是看到没有?

90020

一篇文章完全讲解C语言指针

一般地,int整型的位数等于数据总线的宽度,指针的位数等于地址总线的宽度。 计算机的基本访问单元 学过C语言的人都知道,C语言的基本数据类型中,就属char的位数最小,是8位。...当期望你调用的函数能够使用你的某些方式去操作的时候,回调函数就很有用,比如,你期望某个排序函数在比较的时候,能够使用你定义的比较方法去比较。 有过较深入的C编程经验的人应该都接触过。...如果const 后面是一个类型跳过最近的原子类型,修饰后面的数据。...(原子类型是不可再分割的类型,如int, short , char,以及typedef包装后的类型如果const后面就是一个数据,直接修饰这个数据。...如果被访问的数据被拷贝了,在每个单元中都有自己的一份,对目标数据的操作相互不受影响,叫做深拷贝。 ? 附加知识 指针和引用这个2个名词的区别。他们本质上来说是同样的东西。

85920

【C语言基础】:字符函数和字符串函数

字符分类函数 C语言中有一系列的函数是对字符进行分类的,就是对判断一个字符属于什么类型的字符,这类字符函数的使用都要包含一个头文件ctype.h。...如果参数c是小写字母,返回非零值(真);否则返回0(假)。 【示例】将字符串中的小写字母转大写,其他字符不变。...那么,strcpy的实现原理是怎样的呢?...这个函数执行字符的二进制比较。 这个函数开始比较每个字符串的第一个字符。如果它们彼此相等,继续执行以下对,直到字符不同或达到终止空字符为止。...标准规定: ◦ 第⼀个字符串大于第⼆个字符串,返回大于0的数字 ◦ 第⼀个字符串等于第⼆个字符串,返回0 ◦ 第⼀个字符串小于第⼆个字符串,返回小于0的数字 ◦ 那么如何判断两个字符串?

9210

java核心技术第六篇之断言、日志、包装类型和工具类

可看做是不是: 引用 instanceof 类型 引用的实际类型 是不是 某类型 比较两个对象的实际类型是不是相等: 1....,另开一个实现类 缺点: 代码可读性差 集合框架: 为什么使用集合: 数组的扩容、插入、删除操作十分繁琐 集合的类型: Collection 接口 -->...如果两个对象的hashCode相同,就使用 equals() 方法进行比较, 去掉重复元素,不重复的挂到hashCode对应数组位置中的链表里 3....结束循环,如果索引小于集合长度, 通过next()取出指针指向的集合内对象地址,执行循环体。...在next()中进行集合长度及变化的安全监测,如果索引大于集合长度,说明在 上一次循环的循环体中,出现了修改集合长度的操作直接抛出 并发修改异常;集合之中有一个成员变量modCount

83910

C++常用的函数

如果不能执行转换,返回0。 ...如果有参数 argument 跟随  format 字符串, format 字符串必须包含确定参数输出格式的格式符。  返回值:返回输出的字符个数:如果出现错误,返回一个负数。 ...所需头文件:   返回值:如果流成功关闭, fclose 返回0。如果出错,返回 EOF。  功能:关闭流。 ...如果有参数 argument 跟随  format 字符串, format 字符串必须包含确定参数输出格式的格式符。  返回值:返回输出的字符个数,如果出现错误返回一个负数。 ...所需头文件:   功能: 把 command 传给命令解释器,像执行操作系统命令那样执行字符串。  返回值: 返回命令解释器所返回的值,且当命令解释器返回0时它返回0。

1K20

CC++刁钻问题各个击破之细说sizeof

(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

78320

字符串和内存函数(2)

字符函数 字符分类函数 字符分类函数有如下: 因为每个函数的使用方式基本相同,我们就举一个来简单说明: 当我们使用上面的函数时,我们需用引用头文件,如果函数内为真返回不等于0的数,...如果为假,返回0。...如下图,如果参数是小写转换成大写,如果是大写,则不变。 内存函数 memcpy函数 memcpy函数跟strcpy函数有相似之处,不过memcpy可以拷贝任何类型。...memcmp函数 memcmp函数与strcmp函数类似,不过strcmp函数只能进行字符串的比较,memcmp是内存块的比较,可以比较任意类型的数据。...如上图,我们比较大小的时候,不能单纯比较数字,而要看他们在内存中是怎样的,这样才能得出正确结果。

7510
领券