1.已知一个数组table,用一个宏定义,求出数据的元素个数
#define TBL(table) (sizeof((table))/sizeof((table[0])))
为了防止宏定义的“二义性”,在table和table[]加上括号
2. &a和a做右值时的区别
int a[5] ={4,1,5,3,2};
int *ptr = (int *)(&a + 1);
由于&a和a做右值时的区别:
&a是整个数组的首地址,而a是数组首元素的首地址
具体区别如下:&a是数组指针,其类型为int(*)[5]
*(ptr - 1) = 2;