某程序使用memset初始化二维数组int arr[10][20]。若要将所有元素设为1,下列哪项能正确实现? A. memset(arr, 1, sizeof(arr)) B. memset(arr[0], 1, 10*20*sizeof(int)) C. memset(&arr[0][0], 1, sizeof(arr)) D. 以上均不正确
答案解析
核心考点:memset函数对整型数组的初始化原理。
解题思路:
1. memset按字节赋值,int类型占4字节,设为1会导致每个int变为0x01010101(十进制16843009)。
2. 任何直接使用memset赋值非0值给整型数组的操作均无法得到预期结果。
选项分析:
- A错误:语法正确但语义错误,全部元素将被设为错误值。
- B错误:同A,仅地址表示方式不同。
- C错误:地址计算正确但赋值原理错误。
- D正确:所有选项均无法正确初始化int数组为1。
易错点:容易误选B或C,认为地址计算正确即可,忽视memset的底层字节操作特性。
正确答案:D