Consider the following macro: 

```
#define FOO(a,b) (--a)* 8 + (--b);

```

Now 

```
int graph[8][8] = { 0 };
int *graph_p = &(graph[0][0]);
int *p = graph_p + FOO(2, 3);

```

Why do I get the error:

> 
> IntelliSense: expression must be a modifiable lvalue
> 
> 
>
['https://Stackoverflow.com/questions/32011014', 'https://Stackoverflow.com', 'https://Stackoverflow.com/users/5211135/']
The line 

```
int *p = graph_p + FOO(2, 3);  

```

will be replaced at compile time by the defined macro as 

```
int *p = graph_p + (--2)* 8 + (--3);; 

```

the operand of prefix `--` must be an lvalue. `2` and `3` are integer constants and it can't be an operand of prefix `--` operator.
Try this:

```
Int * p=(int * )(graph-p+FOO(2,3));

```