栈内的变量是默认无初始值的
把如图所示的数组
放入main函数内,就会致错:
原因是:
栈内的变量是默认无初始值的,用memset赋个初始值
memset函数是在头文件#include <memory.h>中定义的。代码改成:
-----------------------------------------------------------------------------------------------------------------------------------------------------
数组作为参数,自动退化为指针
我胖虎又回来了,这次因为传参的时候,数组自动退化成指针了,又采坑了、上代码
#include <iostream>
using namespace std;
void calculate(int container[], int num) {
if (container == nullptr) return;
int len = sizeof(container) / sizeof(int);
//动态申请一个和container一样大的数组
//int *answer;
//answer = (int *)malloc(sizeof(int)*len);
int less = -1, more = len;
for (int i = 0; i < len; i++) {
if (container[i] < num) {
less++;
container[i]=container[less] + container[i];
container[less] = container[i] - container[less];
container[i] = container[i] - container[less];
}
else if (container[i] > num) {
more--;
container[i] = container[more] + container[i];
container[more] = container[i] - container[more];
container[i] = container[i] - container[more];
}
}
int a = 0;
}
int main()
{
int container[] = { 3,4,5,0,2 };
int num = 3;
int len = sizeof(container) / sizeof(int);
calculate(container, num);
return 0;
}
container函数中获得的len的值为1,而不是预期中的5.
-----------------------------------------------------------------------------------------------------------------------------------------------------
交换变量
机灵不能乱抖。最近新学了一种交换两个变量的值的方式,可以不用申请中间变量就交换两个变量的值,如下所示:
//交换a和b的值
a = a + b;
b = a - b;
a = a - b;
于是乎,老夫意气风发的,遇到交换变量的值就用这种方式。恩,bug也就随之而来了
if (arr[l] < arr[r]) {
//交换arr[l]和arr[less]的值
arr[l] = arr[l] + arr[less];
arr[less] = arr[l] - arr[less];
arr[l] = arr[l] - arr[less];
}
肉眼看没什么问题,可是,如果 less 的值和 l 相等,最后arr[l]和arr[less]的值就都变成0了。。。
————————————————————————————————————————————————————————
布尔值不应该参与运算
bool b = true;
bool b2 = -b; //b2是true
对大多数运算符来说,布尔类型的运算江北提升为int类型。上面布尔变量b的值为真,参与运算时将被提升成整数 1 ,对他求负的结果是 -1 。将 -1 在转换会布尔值并将其作为b2的初始值,显然这个厨师值不等于0 。转换成布尔值后应该为 1 。所以,b2 的值为真。
————————————————————————————————————————————————————————
解引用运算符的优先级低于点运算符
(*p).fun();
____________________________________________________________________________________________________
if语句里面的条件如果是负数,也会执行
———————————————————————————————————————————————————————
看到群里有意有意思的
bug在这:
是get_data()返回了一个vector数组,然后std::begin取到迭代器之后,这个verctor数组就析构了,*b就有问题了
哇,不知道是哪个公司,感觉这个版块挺有意思的,想投简历