题目

编写自定义函数实现简易内存按值填充 my_memset,按字节将指定内存区域全部设置为某个特定字节值。

输入格式:第一行输入数组长度 n;第二行输入用于填充的单字节整型数值 val。

输出格式:输出填充后的数组前 n 个元素的十六进制或整型数值。

数据范围与约定:1 ≤ n ≤ 100,填充值以单字节为单位。

思路与算法

1. 按字节写入特性
memset 并不是按元素填充,而是对每一个字节统一赋单字节值 (unsigned char)val。

2. 常见新手陷阱
若对 int a[10] 用 memset 赋 1,每个 int 会被填充为 0x01010101(即 16843009),而非整数 1。memset 最常用于赋 0 或 -1(全 1 补码)。

完整程序

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    // 模拟 memset 按值批量填充数组元素
    public static void myMemset(int[] arr, int val) {
        for (int i = 0; i < arr.length; i++) {
            arr[i] = val;
        }
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.hasNextInt() ? sc.nextInt() : 5;
        int val = sc.hasNextInt() ? sc.nextInt() : 0;

        int[] a = new int[n];
        myMemset(a, val);

        for (int i = 0; i < n; i++) {
            System.out.print(a[i] + (i + 1 < n ? " " : "\n"));
        }
    }
}

运行示例

输出:

0 0 0 0 0