c++考试易错题

1.for (int i = 0; i = 1; ++i) { cout << 'a'; }
这个代码会执行多少次? 答案:无数次。
2.int a; char b; cin >> a >> b; cout << a << endl << b << endl;
如果输入1.5 c 输出结果是什么? 答案:1 换行 . 。但如果把int换成double,结果就是1.5 换行 c。
因为int不存在小数,所以编译时把小数点当做char型传给了b。
3.int calc(int a[]) { a++; } int main() { int a[2]; calc(a); }
这段程序是不会报错的,但是如果在main函数里执行a++,代码就会报错。因为在调用函数形参实际上事一个指针," int a[] 相当于 int a",所以,在calc函数里a获得的是main函数里a数组的首元素地址,对于指针来说可以进行加减运算,但是对数组不能。(数组名相当于指向数组首元素地址的常量)。
4.for (int i = 0; i < 10; ++i, sum += i); cout << sum;
判断该片段的输出值是多少?答案:55 需要注意的是sum在for循环的第三部分进行运算,因此程序会在每次计算完sum之后再判断是否满足循环条件,因此sum最后会把10加上。
5.int a = 1; int * const p = &a; int b = 2; p = &b;
首先说明上面的代码是错误的。因为定义的p为指针常量,可看做(int
)const p,即p为一个指针,且是一个常量,所以p指向的地址应该是固定不变的,但是p地址里面的值可以修改。与之相对的,如下为常量指针。
6.int a = 1; const int * p = &a; *p = 32;
这个代码也是错误的。可看做(const )(int p),那么,说明p指向的整型是一个常量,不可变,所以不可以对*p进行再赋值,但是可以改变p指向的地址,与指针常量恰好相反。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值