You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Zig选择排序代码报错:数组字面量需&转换为[]i8切片类型

Zig选择排序代码错误排查与修复

错误原因

你遇到的编译错误源于Zig的类型系统限制:

  • [_]i8{ 64, 25, 12, 22, 11 }是固定大小的数组,属于值类型
  • []i8是动态切片,本质是指向数组的指针加长度,属于引用类型
    Zig不允许直接将数组字面量赋值给切片变量,必须通过&运算符将数组转换为切片。

两种修复方案

方案1:直接通过&转换数组字面量

修改错误行代码为:

var arr: []i8 = &[_]i8{ 64, 25, 12, 22, 11 };

方案2:先定义固定数组,再生成切片(可读性更强)

var arr_data = [_]i8{ 64, 25, 12, 22, 11 };
var arr: []i8 = arr_data[0..]; // 从数组第0位到末尾生成切片

完整可运行的选择排序代码

const std = @import("std");

pub fn main() !void {
    // 初始化数组并转换为切片
    var arr_data = [_]i8{ 64, 25, 12, 22, 11 };
    var arr: []i8 = arr_data[0..];

    // 执行选择排序
    selectionSort(arr);

    // 打印结果
    std.debug.print("排序后的数组: {any}\n", .{arr});
}

/// 对i8类型的切片执行选择排序
fn selectionSort(arr: []i8) void {
    const len = arr.len;
    var i: usize = 0;
    while (i < len - 1) : (i += 1) {
        // 寻找未排序区间的最小元素索引
        var min_idx = i;
        var j = i + 1;
        while (j < len) : (j += 1) {
            if (arr[j] < arr[min_idx]) {
                min_idx = j;
            }
        }
        // 交换当前元素与最小元素
        const temp = arr[i];
        arr[i] = arr[min_idx];
        arr[min_idx] = temp;
    }
}

运行验证

执行zig build run,控制台会输出:

排序后的数组: [11, 12, 22, 25, 64]

内容的提问来源于stack exchange,提问作者saswatms

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 10:42:41