2010-01-08 2 views
1

Entré à travers cet exemple dans le livre im lecture et il n'a pas de sens du tout pour moi, je suis probablement manquer quelque chose, mais il semble comme vous attribuez le compte avec les valeurs '10' et ensuite la valeur 'x' qui n'est même pas un int. Je me demande simplement si c'est une syntaxe valide.Est-ce faux ou ai-je manqué quelque chose (int count = 10, x;)

Le livre dit ceci:

Les variables de comptage et x sont déclarées comme des variables entières de façon normale. Sur la ligne suivante, la IntPtr variable est déclarée comme étant de type A noter que les deux lignes de déclarations auraient été regroupées en une seule ligne « pointeur vers int. »:

int count = 10, x, *intPtr; 

est ici le programme de sa prise de:

#import <Foundation/Foundation.h> 
int main (int argc, char *argv[ ]) 
{ 
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 

    int count = 10, x; 

    int *intPtr; 

    intPtr = &count; 

    x = *intPtr; 

    NSLog (@"count = %i, x = %i", count, x); 

    [pool drain]; 

    return 0; 

} 
+4

En aparté, en combinant les deux lignes de déclarations sur une seule ligne est mauvaise pratique, car ils ne sont même pas du même type. Personnellement, je n'aime même pas l'idée d'affecter plusieurs variables du même type sur la même ligne, à moins qu'elles ne soient toutes affectées de valeurs ou qu'aucune d'entre elles ne leur soit affectée. – Brian

+1

Je n'utiliserais pas cette syntaxe. Laid. – Erix

+0

Merci les gens, Cela a du sens, il ne me semblait pas juste avec l'opérateur d'affectation jeté là-bas. – nickthedude

Répondre

13

Ceci est juste une déclaration. La déclaration se compose de la partie initiale (déclaration spécificateur) qui décrit la partie «basique» du type, et d'une séquence de de séparateurs séparés par des virgules, chacun déclarant un nom distinct et, éventuellement, modifie le type de base. En C, vous pouvez déclarer plusieurs noms en utilisant le même spécificateur de déclaration

int count, x, *intptr; 

est équivalent à

int count; 
int x; 
int *intptr; 

En option, vous pouvez ajouter un initialiseur à chaque déclarateur ou à un fo eux. Alors

int count = 10, x, *intptr; 

est le même que

int count = 10; 
int x; 
int *intptr; 

Voilà tout ce qui est à lui.

3

C'est equivilent à

int count = 10; 
int x; 
int *intPtr; 
+0

est-ce juste moi ou cela semble-t-il déphasé avec certains de la syntaxe présentée en général pour c? – nickthedude

+1

C'est juste toi. Les déclarants initialisés ne sont pas identiques aux expressions d'affectation, et les virgules entre les déclarants ne sont pas traitées de la même manière que les virgules entre les expressions. –

+0

Yup, c'est juste toi. –

0

signifie Comma, que x est un entier, et * IntPtr est un entier aussi (et IntPtr est pointeur vers int). est comme:

Aunts Mary, Jane, Daryl; 
Mary is stupid; 
Jane is Old; 
Daryl is same as Mary; 
+0

Aussi clair que la boue –

0

est comme

int count, x; 

sauf que le nombre est en cours d'initilized à 10

1

Ceci est une source commune d'erreurs pour les novices et experts C (et C++) programmeurs, avec virgule opérateur. confusion habituelle:

int* p, pp; 
pp = malloc(sizeof(int) * N); /* oops pp is just int, not a pointer */ 
... 
int x; 
x = 12, 13, 14; /* and the value of the x is ... */ 
+1

Et la réponse est ... 14. –

Questions connexes