f(++a, ++a) 输出是什么?—— 实参求值顺序与未定义行为
f(++a, ++a) 输出是什么?函数实参求值顺序无序,同一表达式内对同一变量修改两次属于未定义行为,答案是 D。附易混淆对比与 CSP-J 考点总结。
俄罗斯农民乘法(倍增乘法)
代码分析 int mystery(int a, int b) { if (b == 0) return 0; if (b % 2 == 0) return mystery(a + a, b / 2); return myster...
速算汉诺塔递归公式值
汉诺塔递归公式分析 int hanoi(int n) { if (n == 1) return 1; return 2 * hanoi(n - 1) + 1; } 递推式: $\( \begin{cases} f(1)=1\\ f...
lowerBound:二分查找(查找第一个大于等于 target ...
lowerBound(下界,第一个 ≥ target 的位置) int lowerBound(int a[], int n, int target) { int left = 0, right = n; while (left &...
lowbit (x) 详解
lowbit(x) 详解(CSP‑J/NOIP高频) int lowbit(int x) { return x & (-x); } 作用:取出x二进制中,最低位的1以及后面所有的0,返回这个数值。 示例: \((x=6)\)...
数组作为函数参数会退化为指针
【题目】 考察函数执行过程以下代码的输出是什么? void f(int arr[], int n) { cout << sizeof(arr); } int main() { int a[10]; f(a, 10);...
返回引用的函数调用可以作为左值赋值
核心知识点 1. 函数返回**左值引用 `int&`**,返回的是变量本身,不是拷贝值,所以返回值可以被赋值。 2. `a > b ? a : b`:三目运算符,当两个操作数都是引用时,结果也是引用。 3. `getMax(x,y)...
指针传参的理解
关键记忆 - `int*& p` 读作:**对int型指针的引用** - `*p` 修改的是指针指向的内容; - 如果写 `p = xxx;`,修改的是指针本身(存的地址)。
static局部变量使用与误区
CSP高频坑 - static局部变量**初始化仅一次**,不是每次函数调用都初始化。 - 生命周期:整个程序运行期间;作用域依旧只在函数内部,外面不能直接访问cnt。
c++中cin.getline()和 getline(cin, s...
cin.getline() 和 getline(cin, str) 是 C++ 中用于读取输入的两种不同方法,主要区别如下: 1. 所属类和适用对象 cin.getline() 是 istream 类的成员函数,用于读取 C 风...