1. ++i1和i++的效率分析;
想必前加和后加,日常编程会用到很多,但你是否考虑过他们的效率比较,在for 循环中也常常用到自加。
int increment()
{
value = value + 1;
return value;
}
这段代码就是编译器的实现前加加的函数;
可以脑补,后加加函数必须控制变量在遇到“;”或“,”才会自加,需要的代码步骤更多;
所以前加加的效率更高,在特别要求效率的情况但对自加时间没限制下,使用前加加是最好的了。
2. 函数返回返回值的过程详解;
调用函数会在后大括号即“}”时释放所有的形参变量的空间,如果函数有返回值,其实此时系统会将返回值拷贝于一用于放返回值的空间中,再将此值赋值于主调函数的变量。
但需要强调的是有的编译器为提高效率,不会这样做,会直接赋值于主调函数变量。
3. 函数传递数组时用法解释;
int ar[] = {4300,23,1,98,5,6,734,56,83,7491,43};
int max_value = Max_Value(ar, n);
int min_value = Min_Value(ar, n);
如上的代码所示,在调用函数穿递数组时传递的是数组名;
int max_vealu(int ar[], int n);
而这段代码便是max_vealu函数的定义,可以看出,接收时需注明数组类型;其实数组名便是数组第一个字节空间的指针,函数的传值是值传递,将此指针值传递给形参。
注意数组函数传递的具体写法,不要犯错。
4. 补码;
不论正数负数在计算机内存中都是以补码的方式存储,正数的补码还是自己,但负数不是,在32位操作系统int申请四字节空间,可以保存的最大值是2147483647(2的31次方减一),在编译中对最大值加一的结果是-2147483648;这是因为发生了溢出。
2147483647在内存中是0111 1111 1111 1111 1111 1111 1111 1111,加一后是1000 0000 0000 0000 0000 0000 0000 0000,
此时符号位是1,被解释为一个负数的补码,还原成原码便是-2147483648.