[*]Tによる複数要素ポインター
連続する複数の要素のアドレスを扱います。
「[*]Tによる複数要素ポインター」はCoddyKit上の無料Zig Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはZig Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Zig Academyコースには全4レッスンが含まれています。
連続領域を指す
ポインタが1つの値ではなく、メモリ上に並んだ値の連続領域の先頭を指すことがあります。🧱
[*]T 型
複数要素ポインタは [*]T と記述します。角かっこ内の星印は、連続する T 値を未知の個数だけ指すことを意味します。
var run: [*]u8 = undefined;長さは付随しない
slice とは異なり、複数要素ポインタには長さがありません。安全にアクセスできる要素数は、自分で把握する必要があります。
配列のようにインデックス指定する
複数要素ポインタには角かっこでインデックス指定できます。したがって run[2] はメモリ上を進み、3番目の要素にアクセスします。
const third = run[2];ポインタ演算
複数要素ポインタに加算すると、要素単位で移動します。そのため run + 1 は1バイト先ではなく、T 1個分先を指します。
const next = run + 1;単一要素と複数要素
*T は正確に1つの値を指し、インデックス指定できません。一方、[*]T は複数の値を指し、インデックス指定とポインタ演算に対応します。
どこで使われるか
複数要素ポインタは、C と連携するときによく登場します。C ではバッファへの裸のポインタを渡し、長さを別に管理するためです。
境界チェックはない
長さが不明なため、複数要素ポインタのインデックス指定には境界チェックがありません。遠くまで読み取ると未定義動作になります。
Slice を優先する
コードを自分で管理できる場合は、長さをまとめて保持するslice []T のほうが安全です。[*]T は主に C との境界で使います。
ポインタから Slice へ
個数がわかったら、ptr[0..n] で長さを付加し、複数要素ポインタを安全な境界チェック付き slice に変換できます。
const view = run[0..n];Sentinel 付きの形式
Zig には [*:0]u8 のような sentinel 終端形式もあります。これは 0 バイトのような既知の値で連続領域の終端を示すポインタです。
var cstr: [*:0]const u8 = "hi";クイックチェック
slice []T と複数要素ポインタ [*]T を比較してください。複数要素ポインタにないものは何ですか?
まとめ
複数要素ポインタ [*]T は値の連続領域を指し、インデックス指定とポインタ演算に対応しますが、長さを持ちません。可能な場合は slice に変換するのが最適です。🎯
よくある質問
「[*]Tによる複数要素ポインター」レッスンは無料ですか?
はい。「[*]Tによる複数要素ポインター」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Zig Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Zig Academyコースには全4レッスンが含まれています。
「[*]Tによる複数要素ポインター」で何を学びますか?
連続する複数の要素のアドレスを扱います。 ブラウザで直接実行するハンズオンコードでZig Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Zig Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのZig Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「[*]Tによる複数要素ポインター」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このZig Academyレッスンでコードを書いて実行できますか?
はい。すべてのZig Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- *Tによる単一要素ポインター
- ptr.*でデリファレンスする
- [*]Tによる複数要素ポインター
- constポインターとアラインメント