gpt4 book ai didi

zig 结构、指针、字段访问

转载 作者:行者123 更新时间:2023-12-04 14:06:05 25 4
gpt4 key购买 nike

我试图用通用算法实现向量代数,结果却玩弄了迭代器。我发现了两个不明显和意外行为的例子:

  1. 如果我有一个指针 p 指向一个带有字段 fi 的结构(实例),我可以像 p.fi 一样简单地访问该字段(而不是 p.*.fi)
  2. 如果我有一个“成员”函数fun(this: *Self)(其中Self = @This())和一个实例s,我可以像 s.fun() (而不是 (&s).fun())一样简单地调用函数

我的问题是:

  1. 是否在某处记录(或以任何方式提及)?我查看了来自 ziglearn.org 的语言引用和指南。什么也没找到
  2. 我们在这些例子中观察到了什么?两种特殊情况的语法糖,还是有更一般的规则可以从中推断出这种行为?
  3. 有更多奇怪指针行为的例子吗?

最佳答案

对于 1 和 2,你是正确的。在 Zig 中,点透明地适用于结构值和结构指针。同样,命名空间函数在调用时也会做正确的事情。

我能想到的唯一其他类似行为是用于数组的 [] 语法。您可以直接对数组值和数组指针互换使用。这有点等同于点对结构的操作方式。

const std = @import("std");

pub fn main() !void {
const arr = [_]u8{1,2,3};
const foo = &arr;

std.debug.print("{}", .{arr[2]});
std.debug.print("{}", .{foo[2]});
}

据我所知,这些是此行为的仅有的三个实例。在所有其他情况下,如果某些东西需要指针,您必须明确提供它。即使将数组传递给接受切片的函数,也必须显式获取数组的指针。

权威的信息来源是语言引用,但很快查了一下,似乎没有专门的段落。也许有一些我错过的例子。
https://ziglang.org/documentation/0.8.0/

关于zig 结构、指针、字段访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68454051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com