首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何找到变量的大小而不使用

如何找到变量的大小而不使用
EN

Stack Overflow用户
提问于 2009-09-08 11:10:11
回答 12查看 37.5K关注 0票数 3

让我们假设我已经声明了某些数据类型的变量“i”(可能是int、char、float或double) .

注意:只是考虑'i‘是声明的,如果它是int、char、float或double数据类型,就不用麻烦了。因为我想要一个通用的解决方案,我只是简单地提到变量'i‘可以是任意一种数据类型,即int、char、float或double。

现在,我可以找出变量'i‘的大小没有相当大的运算符吗?

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2009-09-08 11:13:53

您可以使用以下宏,摘自这里

代码语言:javascript
复制
#define sizeof_var( var ) ((size_t)(&(var)+1)-(size_t)(&(var))) 

其思想是使用指针算法((&(var)+1))确定变量的偏移量,然后减去变量的原始地址,得到变量的大小。例如,如果int16_t i变量位于0x0002,则将从0x0006中减去0x0002,从而获得0x4或4个字节。

但是,我认为不使用sizeof并不是一个合理的理由,但我相信您必须有一个理由。

票数 22
EN

Stack Overflow用户

发布于 2009-09-08 11:16:47

我已经很久没有编写任何C代码了,而且我从来不擅长它,但这看起来是正确的:

代码语言:javascript
复制
int i = 1;
size_t size = (char*)(&i+1)-(char*)(&i);
printf("%zi\n", size);

我相信有人可以告诉我为什么这是错误的理由,但它给我打印了一个合理的价值。

票数 8
EN

Stack Overflow用户

发布于 2014-10-21 02:06:51

这很管用..。

代码语言:javascript
复制
int main() {
    int a; //try changing this to char/double/float etc each time//
    char *p1, *p2;
    p1 = &a;
    p2 = (&a) + 1;
    printf("size of variable is:%d\n", p2 - p1);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1393394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档