欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

采坑记录

程序员文章站 2024-03-22 23:01:28
...

栈内的变量是默认无初始值的

把如图所示的数组

采坑记录

放入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就有问题了

 

哇,不知道是哪个公司,感觉这个版块挺有意思的,想投简历