オプショナルポインターと?*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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- オプショナル型を宣言する
- ifとorelseで安全にアンラップする
- オプショナルポインターと?*T
- nullとundefinedの違い