声明 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 的预期行为。但是有没有办法让编译器知道 const 表的大小,给定一个指向表的指针而不是符号名称?