LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1273|回复: 11

C怎样动态获取变量大小

[复制链接]
发表于 2006-5-28 17:40:15 | 显示全部楼层 |阅读模式
sizeof可以在编译期间获取任意一个变量的长度如 int在32bit字长机器上为4Byte

那如何能在运行时期间获取呢?
发表于 2006-5-28 18:15:57 | 显示全部楼层
难道你的int在运行期间会变成8个字节?
回复 支持 反对

使用道具 举报

发表于 2006-5-28 18:52:59 | 显示全部楼层
sizeof()都是静态获取的
哈哈
回复 支持 反对

使用道具 举报

发表于 2006-5-28 21:49:35 | 显示全部楼层
Post by 剑心
sizeof()都是静态获取的
哈哈



不是很明白,还表剑心帮忙解释一下,可以吗!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-29 07:13:20 | 显示全部楼层
是这样的,

如果利用C而不是C++的STL 或者 Boost之类的泛型编程.

我构造了一个单链表,怎样插入和删除任意的类型,如自定义的任何结构.

如果不通过获取变量大小,并分配一定空间的话,就只能获取单个结构的全部成员的
大小. 而一旦我改变两结构,或者说,我使用了不同的结构,那就要 重新编译了 ?
回复 支持 反对

使用道具 举报

发表于 2006-5-29 09:07:25 | 显示全部楼层
Post by newroot
不是很明白,还表剑心帮忙解释一下,可以吗!!

数据类型的大小是固定的,不同的体系结构有不同的规定;
像int在我们用的机器上是2个字节,短整型是2个字节,长整型是4个字节;编译的时候就可以静态获得了,而实际上编译器也是这么做的。
回复 支持 反对

使用道具 举报

发表于 2006-5-29 11:00:42 | 显示全部楼层
Post by microsoftxiao
是这样的,

如果利用C而不是C++的STL 或者 Boost之类的泛型编程.

我构造了一个单链表,怎样插入和删除任意的类型,如自定义的任何结构.

如果不通过获取变量大小,并分配一定空间的话,就只能获取单个结构的全部成员的
大小. 而一旦我改变两结构,或者说,我使用了不同的结构,那就要 重新编译了 ?

像这种情况,一个解决办法是,链表结点中的数据项采用指针,而实际的数据空间是动态分配的,使用完之后,回收一下就行了。
回复 支持 反对

使用道具 举报

发表于 2006-6-28 17:56:54 | 显示全部楼层
Post by 剑心
数据类型的大小是固定的,不同的体系结构有不同的规定;
像int在我们用的机器上是2个字节,短整型是2个字节,长整型是4个字节;编译的时候就可以静态获得了,而实际上编译器也是这么做的。


兄弟,int在32位机器上是4字节把?在64位机器上还是4字节。在16位机器上才是2字节。
回复 支持 反对

使用道具 举报

发表于 2006-6-28 17:58:12 | 显示全部楼层
Post by pupilzeng
像这种情况,一个解决办法是,链表结点中的数据项采用指针,而实际的数据空间是动态分配的,使用完之后,回收一下就行了。


数据项用void *
回复 支持 反对

使用道具 举报

发表于 2006-6-29 20:27:31 | 显示全部楼层
在64位机器上还是4字节。
不是8个吗?.... 汗。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表