gpt4 book ai didi

c - 滥用大小 : get the size of a const table

转载 作者:太空宇宙 更新时间:2023-11-04 00:27:37 26 4
gpt4 key购买 nike

当声明一个常量表时,可以使用 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 的预期行为。但是有没有一种方法可以让编译器知道常量表的大小,给定一个指向表的指针而不是符号名称?

最佳答案

您要求的是指针的大小。这始终是指针大小(即在 32 位机器上通常为 4 个字节,在 64 位机器上通常为 8 个字节)。在第二次尝试中,您要求数组的大小,因此您得到了预期的结果。

关于c - 滥用大小 : get the size of a const table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2524050/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com