#include <stdio.h>
#include "stdlib.h"
#define ARRAY_IDX(type, array, i) ((type *)(array+i)) // you can only modify this line!
int main( int argc, const char * argv[ ] ) {
void * ptr
= malloc ( 10 * sizeof ( int ) ) ; #ifdef ARRAY_IDX
for ( int i = 0 ; i < 10 ; i++ ) {
ARRAY_IDX( int , ptr, i) = i * 2 ;
}
for ( int i = 0 ; i < 10 ; i++ ) {
printf ( "%d " , ARRAY_IDX
( int , ptr
, i
) ) ; }
#else
printf ( "Implement ARRAY_IDX first" ) ; #endif
}
I2luY2x1ZGUgPHN0ZGlvLmg+IAojaW5jbHVkZSAic3RkbGliLmgiCiNkZWZpbmUgQVJSQVlfSURYKHR5cGUsIGFycmF5LCBpKSAoKHR5cGUgKikoYXJyYXkraSkpIC8vIHlvdSBjYW4gb25seSBtb2RpZnkgdGhpcyBsaW5lIQoKaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiBhcmd2W10pIHsKICAgIHZvaWQgKnB0ciA9IG1hbGxvYygxMCpzaXplb2YoaW50KSk7CiNpZmRlZiBBUlJBWV9JRFgKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkrKykgewogICAgICAgIEFSUkFZX0lEWChpbnQsIHB0ciwgaSkgPSBpICogMjsKICAgIH0KCiAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKyspIHsKICAgICAgICBwcmludGYoIiVkICIsIEFSUkFZX0lEWChpbnQsIHB0ciwgaSkpOwogICAgfQogICAgZnJlZShwdHIpOwojZWxzZQogICAgcHJpbnRmKCJJbXBsZW1lbnQgQVJSQVlfSURYIGZpcnN0Iik7CiNlbmRpZgp9
compilation info
prog.c: In function 'main':
prog.c:9:32: error: lvalue required as left operand of assignment
ARRAY_IDX(int, ptr, i) = i * 2;
^
prog.c:13:16: warning: format '%d' expects argument of type 'int', but argument 2 has type 'int *' [-Wformat=]
printf("%d ", ARRAY_IDX(int, ptr, i));
^
stdout