
1. break语句只能跳出switch选择以及循环语句的当前嵌套层次!
break跳一层(执行该层循环后的语句),continue跳一次(执行下一次循环)
2. 关于空指针和未初始化指针:
(1)对0x0这个地址取值是非法的,无法对内存为0的地址取地址。
(2)空指针(NULL/nullptr)可以确保不指向任何对象或函数(指向为NULL),对象或函数的指针不可能为空指针;而未初始化指针(野指针)则可能指向任何地方。
(3)malloc函数在分配内存失败时会返回空指针(NULL/nullptr),而非为初始化的指针;C++在分配内存失败时会抛出BAD_ALLOC异常。
(4)野指针产生原因:
4.1 声明的指针未被初始化,内存空间中的值在未赋值之前是随机数,因此会产生野指针。解决方法:创建指针应该将其初始化为NULL或者指向某一内存空间。
4.2 通过malloc或new申请空间并释放后没有将指针置为空会产生野指针(失效指针)。
3. 关于枚举变量的定义不正确的为C:由于C未定义变量。。(答案不重要,看知识点)
声明枚举变量的三种方法:
(1)先声明枚举类型后定义枚举类型变量
(枚举类型中的枚举值若未初始化,默认值从0依次递加:sun=0,mou=1...)
enum WeekdayType
{
sun, mon, tue, wed, thu, fri, sat
};
enum WeekdayType today, yesterday, tomorrow;
(2)声明枚举类型的同时定义枚举类型变量
enum WeekdayType
{
sun, mon, tue, wed, thu, fri, sat
}today,yesterday,tomorrow;
(3) 直接定义枚举类型变量
enum
{
sun, mon, tue, wed, thu, fri, sat
}today,yesterday,tomorrow;
4. 使用关键字typedef可以定义类型别名,即给已存在的类型起别名,不能定义变量!
5. 求三个数的最大乘积:
int i, j;
void QuickSort(int* a, int left, int right)
{
int tmp, t;
if (left>right) return;
tmp = a[left]; //习惯令初始值为第一个元素
i = left, j = right;
while (i != j) //i==j时一轮循环结束,要交换基准值与a[i]=a[j]
{
while (a[j] >= tmp && i < j) //先找右边!
{
j--;
}
while (a[i] <= tmp && i < j)
{
i++;
}
if (i < j) //前两个while都退出代表j从右往左找到比基准小的值且i从左往右找到比基准大的值,此时交换a[i]和a[j]
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
a[left] = a[i];
a[i] = tmp;
QuickSort(a, left, i - 1);
QuickSort(a, i + 1, right);
}
long long solve(int* A, int ALen ) {
QuickSort(A,0,ALen-1);
long long max1=A[ALen-1],max2=A[ALen-2],max3=A[ALen-3];
long long min1=A[0],min2=A[1];
if(min1<0&&min2<0)
{
if((-min1>A[ALen-2]||-min1>A[ALen-3])&&(-min2>A[ALen-2]||-min2>A[ALen-3]))
{
return A[ALen-1]*min1*min2;
}
}
return max1*max2*max3;
}欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)