0Pricing
Zig Academy · レッスン

オプショナルポインターと?*T

ポインターとオプショナル性を組み合わせます。

「オプショナルポインターと?*T」はCoddyKit上の無料Zig Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはZig Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Zig Academyコースには全4レッスンが含まれています。

ポインターもoptionalにできる

ポインターは通常、常に有効な値を指していなければなりません。これをoptionalにすると、まだ何も指していないことを正当に表せます。

?*Tという形

?*Tという型は、Tへのoptionalポインターを表します。実際の値を指すか、nullを保持します。

var node: ?*Node = null;

安全なnullポインター

これはCのnullポインターに対するZigの答えです。ポインターが存在しないことはありますが、optionalによって、参照解除の前にチェックするよう強制されます。

参照する前にアンラップする

?*Tを直接デリファレンスすることはできません。まずifまたはorelseでアンラップし、中にある通常のポインターを取得します。

if (node) |p| {
    use(p.*);
}

キャプチャで実際のポインターを取得する

ifのキャプチャ内では、名前は通常の*Nodeになり、optionalでないポインターと同じように.*でデリファレンスできます。

if (head) |p| {
    const value = p.*;
}

連結構造に最適

optionalポインターは、チェーンの末尾でnextまたはchildフィールドがnullになる連結リストや木構造で特に役立ちます。

const Node = struct { next: ?*Node };

nullが終端を示す

リストをたどるとき、nextフィールドのnullは、最後のノードに到達したため停止すべきことを明確に示します。

Zigはタグを格納しない

ポインターの場合、Zigはnull状態をポインター値そのものに格納します。そのため、?*Tは通常のポインターより余分な領域を必要としません。

constなoptionalポインター

読み取り専用とoptionalは組み合わせられます。?*const Tは、読み取りはできますが書き込みはできないoptionalポインターです。

var view: ?*const u8 = null;

予期しないクラッシュは起こらない

型がnullになる可能性を示しているため、コンパイラーはチェックを忘れることを許しません。生のCポインターをデリファレンスする場合とは異なります。

チェーンをたどる

各optionalのnextポインターをキャプチャするwhileループは、nullが現れるまでリストを走査する慣用的な方法です。

while (cur) |n| {
    cur = n.next;
}

確認問題

?*Nodeという型は何を表しますか?

まとめ

?*Tについて学びました。これは安全なoptionalポインターです。デリファレンスする前にアンラップし、連結構造の終端をnullで示します。🔗

よくある質問

「オプショナルポインターと?*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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. オプショナル型を宣言する
  2. ifとorelseで安全にアンラップする
  3. オプショナルポインターと?*T
  4. nullとundefinedの違い
← Zig Academyに戻る