C multiple single line declarations

前端 未结 4 1808
無奈伤痛
無奈伤痛 2020-12-03 06:51

What happens when I declare say multiple variables on a single line? e.g.

int x, y, z;

All are ints. The question is what are y and z in th

相关标签:
4条回答
  • 2020-12-03 07:19

    In your first sentence:

    int x, y, z;
    

    They are all ints.

    However, in the second one:

    int* x, y, z;
    

    Only x is a pointer to int. y and z are plain ints.

    If you want them all to be pointers to ints you need to do:

    int *x, *y, *z;
    
    0 讨论(0)
  • 2020-12-03 07:20

    Only x is an int pointer. Y and Z will be just int. If you want three pointers:

    int * x, * y, * z;
    
    0 讨论(0)
  • 2020-12-03 07:32

    It is important to know that, in C, declaration mimics usage. The * unary operator is right associative in C. So, for example in int *x x is of the type pointer to an int (or int-star) and in int x, x is of type int.

    As others have also mentioned, in int* x, y, z; the C compiler declares x as an int-star and, y and z as integer.

    0 讨论(0)
  • 2020-12-03 07:36

    Only x is a pointer to int; y and z are regular ints.

    This is one aspect of C declaration syntax that trips some people up. C uses the concept of a declarator, which introduces the name of the thing being declared along with additional type information not provided by the type specifier. In the declaration

    int* x, y, z;
    

    the declarators are *x, y, and z (it's an accident of C syntax that you can write either int* x or int *x, and this question is one of several reasons why I recommend using the second style). The int-ness of x, y, and z is specified by the type specifier int, while the pointer-ness of x is specified by the declarator *x (IOW, the expression *x has type int).

    If you want all three objects to be pointers, you have two choices. You can either declare them as pointers explicitly:

    int *x, *y, *z;
    

    or you can create a typedef for an int pointer:

    typedef int *iptr;
    iptr x, y, z;
    

    Just remember that when declaring a pointer, the * is part of the variable name, not the type.

    0 讨论(0)
提交回复
热议问题