文章目录
- 指针的值
- 指针与数组、函数的组合
- 空结构体
- * 和 ++ 的优先级
指针的值
指针的值是一个地址,题目中的字符串 “girl” 应该是 *p 的值,即指针 p 所指地址存储的数据的值。
指针与数组、函数的组合
int *p[n]
等价于 int (*)p[n]
,是一个指针数组,因为 *
优先级比 []
低,所以其本质上是一个数组,如果要让 p 是一个指针,则要写成 int (*p)[n]
;
CD 选项也是同样的问题,他们其实都是返回值为指针的函数(指针函数)C。 选项说指针指向返回值,这是错误的,返回值就是指针本身,这个返回值指向一个整型数据。如果要让 p 为一个函数指针,格式应改为 int (*p)()
。
空结构体
C++标准规定,凡是一个独立的(非附属)对象都必须具有非零大小,生成类对象时需要申请内存,0字节内存申请可能导致对象内存地址是无效的,因此空类生成对象时编译器会主动插入一个char大小的数据。
* 和 ++ 的优先级
这题做对了,不过是因为没有 11 这一选项。
将 a b c 代入 宏定义: ++a + b * ++b + c
, a 和 c 应该没有争议,所以最后变成 2 + b * ++b + 3
,由于 *
的优先级比 ++
低,所以最后变成 2 + 3 * 3 + 3
,即 14。 ( 运算时右边的 b 值变了,左边也会变,因为它们是同一变量,所以答案不是 11)