1.a=3 * 5 , a * 4; 最终a为60,是否正确?
答案:错误
解析:逗号表达式,依次计算,整体的值为最后结果,先计算a=35,所以a的值是15,再计算a4,由于没有再进行赋值运算,所以a的值还是15,不过整体表达式的值是60,可以这样测试 b=(a=35,a4);你会发现输出的a是15,b是60
2.输出的结果是多少个字节?
#include <iostream>
using namespace std;
struct Bar
{
char c[16];
};
struct Test
{
Bar& bar;
};
int main()
{
cout << sizeof(Test::bar);
}
答案:16个字节
解析:结构体Bar的大小为16个字节,结构体Test的大小为4个字节,因为引用是4个字节,但是Test作用域下的bar为16个字节
3.执行如下代码后输出结果是多少?
int main() {
int a[5] = {
1, 2, 3, 4, 5};
int *ptr = (int*)(&a + 1);
printf("%d, %d", *(a + 1), *(ptr - 1));
return 0;
}
答案:2,5
解析:&a + 1,其中 + 1 偏移的大小为 a 整个数组的大小,即 5 个 int 型的大小;a + 1,其中 + 1 偏移的大小为 a 中一个元素的大小,即 1 个 int 型的大小;ptr - 1,由于强制类型转换,此时 - 1 偏移的大小为 1 个 int 型;
a最初指向的是数组的第一个元素,加一后指向数组的第二个元素,所以为2,ptr最初指向的是数组最后一个元素的后面,减一后指向数组的最后一个