#Define behavior in c

#define int_p int*
int_p p1,p2,p3; // only p1 is a pointer !

can someone explain why this is so.

+3
source share
3 answers

#define- it's just text substitution. The above code is equivalent

int *p1, p2, p3;

therefore only p1a pointer. You need

typedef int* int_p;

instead.

+14
source

Instead of thinking of it this way:

int* (p1, p2, p3);

think of it this way:

int (*p1), p2, p3;

As in the case, only a symbol with an asterisk in front of it becomes a pointer, but not all.

+2
source

:

; .

#define int_p int*
int_p p1, p2, p3;

int* p1, p2, p3;

; * , ; IOW,

int (*p1), p2, p3;

; int* p1; , int *p1; int * p1;.

, :

  • :
    
        int *p1, *p2, *p3;
    
  • ,
    
        int_p p1;
        int_p p2;
        int_p p3;
    
  • `typedef`:
    
        typedef int *int_p; 
        int_p p1, p2, p3;
    

, typedef ; int *, int *.

+1

Source: https://habr.com/ru/post/1762048/


All Articles