首先简单介绍下sizeof,他是用来计算某个数据或数据类型在内存中所占用的存储空间,以字节为单位进行计数。下面是简单的例子。
分析:因为a是整形变量,int型数据占4个字节。
arr数组是整形数组,内有3个元素,所以占用3*4个字节。
arr1数组是字符串,一个字符占一个字节,系统会在字符串后面自动补'\0',所以占用6个节。
如上图,有第一个例子可轻松看出40和10。但是为什么下面两个输出的结果是8,8呢。
分析:数组传参时,传的的地址,我们用的是指针类型的形参来接收,在test1中sizeof(arr)求的是指针类型所占的字节数大小,在调用test2时也是同样的道理。不管是什么类型的指针,比如char,int,他们所占的字节数大小都是4或者8。实际上,指针所占字节的大小跟操作系统有关,32位操作系统返回值是4,64位操作系统返回值是8。
短路操作
&&--左边操作数如果为假,右边无需计算
||--左边操作数如果为真,右边无需计算
例1:
分析:因为a初始值为0,a++时,a先使用后++,此时已经为假了,就不再进行后边的计算,因此i的值为0,b,c,d的值不变。
例2:
分析:a初始为0,此时为假,++后变为1,继续右边的计算,b先++为3,此时为真,不再进行后边的计算,d的值也不会改变。因为表达式为真,所以i的值为1。
这就叫短路操作。