CodeBlanks Logo Icon CodeBlanks

Struct

Struct ile C struct öğrenirsin.

Struct

Struct, dart:ffi ile C struct'larını Dart tarafında temsil eden sınıftır. Bir Struct, extends Struct ile tanımlanır ve C tarafındaki alanları Dart tarafında @Int32() gibi annotation'larla bildirir.

Örneğin class Point extends Struct { @Int32() external int x; @Int32() external int y; }, C'deki struct Point { int x; int y; } karşılığıdır. Struct alanları external olur; bu, belleğin C tarafında yönetildiğini belirtir.

Struct bellek düzeni

Struct alanlarının sırası ve türü, C struct'ının bellek düzeniyle birebir eşleşmelidir. Aksi halde veri bozulması olur. @Int32() 4 bayt, @Double() 8 bayt, @Int8() 1 bayt kaplar.

Struct'lar Pointer<Point> ile referanslanır ve Pointer.ref ile erişilir. Struct belleği ya C tarafında ayrılır ya da calloc/malloc ile Dart tarafından ayrılır. Bellek serbest bırakılmazsa sızıntı olur.

Uygulama StructInfo sınıfı

Bir StructInfo sınıfı tanımla: final String name; final int fieldCount; StructInfo(this.name, this.fieldCount); alan ve kurucu. String describe() => '$name: $fieldCount fields'; metodu. main içinde final si = StructInfo('Point', 2); yarat; print(si.describe()); ile yazdır.

Başlangıç kodu

main.dart
void main() {
  // StructInfo sınıfını tanımla (name, fieldCount; describe)
  // bir StructInfo yarat; describe() yazdır
}

Örnek çözüm

main.dart
class StructInfo {
  final String name;
  final int fieldCount;
  StructInfo(this.name, this.fieldCount);
  String describe() => '$name: $fieldCount fields';
}

void main() {
  final si = StructInfo('Point', 2);
  print(si.describe());
}

Beklenen çıktı

Point: 2 fields

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Bir Struct nasıl tanımlanır?

  • extends Struct ile Doğru cevap
  • extends Class ile
  • implements Struct ile
  • with Struct ile

Açıklama: bir Struct extends Struct ile tanımlanır.

2 Struct parçalarını eşleştir

Kavram Anlamı
extends Struct Tanım biçimi
@Int32() Alan annotation
external Bellek C tarafında
Pointer<T> Struct referansı

3 Struct annotation

Soru
class Point extends Struct {
  @____() external int x;
}
Cevap
class Point extends Struct {
  @Int32() external int x;
}

Açıklama: @Int32() bir int alanı 4 bayt olarak bildirir.

Uzman bölümündeki tüm dersler