При объявлении таблицы const можно получить размер таблицы с помощью sizeof. Тем не мение,
как только вы перестанете использовать имя символа, оно больше не будет работать. есть ли способ заставить следующую программу вывести правильный размер для таблицы A вместо 0?
#include <stdio.h>
struct mystruct {
int a;
short b;
};
const struct mystruct tableA[] ={
{
.a = 1,
.b = 2,
},
{
.a = 2,
.b = 2,
},
{
.a = 3,
.b = 2,
},
};
const struct mystruct tableB[] ={
{
.a = 1,
.b = 2,
},
{
.a = 2,
.b = 2,
},
};
int main(int argc, char * argv[]) {
int tbl_sz;
const struct mystruct * table;
table = tableA;
tbl_sz = sizeof(table)/sizeof(struct mystruct);
printf("size of table A : %d\n", tbl_sz);
table = tableB;
tbl_sz = sizeof(tableB)/sizeof(struct mystruct);
printf("size of table B : %d\n", tbl_sz);
return 0;
}
Вывод:
size of table A : 0
size of table B : 2
Это предполагаемое поведение sizeof. Но есть ли способ для компилятора узнать размер таблицы констант, учитывая указатель на таблицу вместо имени символа?