const int *p, int * const p ve const int * const p arasındaki fark nedir?

Cevap

Kural: `const` solundaki şeye uygulanır; solunda bir şey yoksa sağındakine. Bildirimi sağdan sola okumak işi kolaylaştırır.

BildirimOkunuşuVeri değişir mi?Pointer değişir mi?
const int *pp, const int'e pointerHayırEvet
int const *pYukarıdakiyle aynıHayırEvet
int * const pp, int'e const pointerEvetHayır
const int * const pconst int'e const pointerHayırHayır
int a = 1, b = 2;

const int *p1 = &a;
/* *p1 = 5;   HATA */
p1 = &b;      /* OK */

int * const p2 = &a;
*p2 = 5;      /* OK */
/* p2 = &b;   HATA */

const int * const p3 = &a;   /* ikisi de yasak */

Gömülü sistemlerde neden önemli?

  • Fonksiyon sözleşmesi: void send(const uint8_t *buf, size_t len) fonksiyonun tamponu değiştirmeyeceğini garanti eder ve string literal geçirilebilir.
  • Flash'a yerleşim: const global tablolar (lookup table, font) genelde .rodata bölümüne, yani Flash'a konur ve değerli RAM harcamaz.
static const uint16_t sine_lut[256] = { /* ... */ };
  • Register tanımları: Sabit adresli ama içeriği değişen register için volatile uint32_t * const REG. Salt okunur bir durum register'ı için const volatile uint32_t *; yazılım değiştiremez, donanım değiştirebilir.

const volatile birlikte kullanılabilir ve çelişkili değildir: "ben değiştirmem ama değer değişebilir".

  1. C dilinde volatile anahtar kelimesi ne işe yarar?OrtaC ProgramlamaEmbedded
  2. Bir yazmaçtaki belirli bir biti set, clear ve toggle eden C kodunu yazın.KolayC ProgramlamaEmbedded
  3. Stack ile heap arasındaki fark nedir? Gömülü sistemlerde dinamik bellek kullanımından neden kaçınılır?OrtaC ProgramlamaEmbedded
  4. Endianness nedir? Little-endian ile big-endian farkı nedir?KolayC ProgramlamaEmbedded
  5. Bit field nedir? Donanım register'larına erişimde bit field mi yoksa bit maskesi mi kullanılmalı?OrtaC ProgramlamaEmbedded
  6. Fonksiyon pointer'ları ve callback tabloları gömülü sistemlerde nasıl kullanılır? Bir state machine örneği verin.OrtaC ProgramlamaEmbedded

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle