SORU
13 NİSAN 2012, Cuma


Etrafında dize char dizi bildirimi geçerli değişmez kaşlı? (örneğin: char s[] = {"Merhaba Dünya"})

Kazara hattı char s[] = {"Hello World"}; düzgün bir şekilde derlendi ve char s[] = "Hello World"; aynı tedavi gibi görünüyor bulundu. İlk ({"Hello World"}) bir dizi ler için bildirim char *s[] şöyle olmalıdır yani karakter dizisi, bir öğe içeren değil mi? Eğer 10 ** değiştirirsem aslında derleyici beklendiği gibi de kabul eder.

Bir cevap ararken, bu this one bahsedilen ama orada bulduğum tek yer standart hiçbir gerekçe.

Yani benim soru, neden char s[] = {"Hello World"}; sol tarafı 12 ** türü olmasına rağmen derlendi ve sağ tarafı türüdür hattı array of array of char?

Aşağıdaki çalışma programı:

#include<stdio.h>
int main() {
    char s[] = {"Hello World"};
    printf("%s", s); // Same output if line above is char s[] = "Hello World";
    return 0;
}

Herhangi bir açıklama için teşekkürler.

P. S. Benim derleyici gcc-4.3.4.

CEVAP
13 NİSAN 2012, Cuma


Standart dediği için izin var: C99 bölüm 6.7.8, Madde 14:

Karakter türü bir dizi karakteri dize, bir isteğe bağlı olarak başlatılmış olabilir parantez içinde. Karakter dize ardışık karakterlerin değişmez (dahil bilinmeyen boyutta yer varsa veya dizi ise sonlandırıcı null karakteri) başlatılamadı dizinin elemanları.

Bu ne demek hem

char s[] = { "Hello World" };

ve

char s[] = "Hello World";

hiçbir şey daha fazla sözdizimsel şeker daha

char s[] = { 'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', 0 };

İlgili bir kayda göre (aynı Bölüm, §11), C de skaler başlatıcılar gibi etrafında parantez sağlar

int foo = { 42 };

bu arada, güzel bileşik hazır sözdizimi ile uyuyor

(int){ 42 }

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ExcelIsFun

    ExcelIsFun

    16 ŞUBAT 2008
  • Joseph Hayhoe

    Joseph Hayho

    20 Mayıs 2010
  • stokelycalm

    stokelycalm

    28 Aralık 2010