小杨正在开发一款名为“星际网格”的游戏,他用二维数组 int map[5][4]; 来表示地图。已知 int 占 $4$ 字节,如果 map 的内存地址是 0x2000,则表达式 &map + 1 的地址值是( )。
答案C。考点: 数组/字符串的基本操作。
关键提醒:C++中的^是异或运算符,不是乘方!2^5=7而非32。这是最高频的错误。
数组下标从0开始,a[n]访问的是第n+1个元素。越界不报编译错但结果不可预测。
【考点】二维数组内存计算|指针算术运算|表达式求值
解题思维:先算总元素数 5×4=20 个,每个 int 占 4 字节,得 20×4=80 字节,80 进制是 0x50。&map 是数组整体首地址,+1 表示往后移动一个"map 数组"的跨度,即整体大小 80 字节,所以 0x2000+0x50=0x2050。
陷阱拆解:
反命题思维:若改成 int map[3][6] 或 short map[5][4],答案会如何变化?命题人正是要你区分"指针整体加一"和"元素指针加一"的本质差异。