免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: packard
打印 上一主题 下一主题

请教不用sizeof如何判断数组大小 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2008-06-01 13:35 |只看该作者
19楼的

\0的是strlen,而且还必须是字符串

sizeof是算数组的大小的,而不是存了多少东西的

论坛徽章:
0
22 [报告]
发表于 2008-06-01 13:40 |只看该作者
原帖由 tyz 于 2008-6-1 13:35 发表
19楼的

\0的是strlen,而且还必须是字符串

sizeof是算数组的大小的,而不是存了多少东西的

恩,我还真的错误的理解了一个问题,但来基本功还是太差了,要加强啊~
感谢你提供strlen函数,这样我就可以解决另一个问题了~谢谢~
有谁能给我讲一下关于sizeof的具体功能??我想学习一下(我不常用sizeof)

[ 本帖最后由 w90300471291 于 2008-6-1 14:00 编辑 ]

论坛徽章:
0
23 [报告]
发表于 2008-06-01 13:45 |只看该作者
int f(int i)
{
        int aa;
        printf("%d\n",sizeof(aa));
        return 0;
}

输出为 i*4; aa是个数组;

Windows NT/2000/XP环境,32位编译器
void func(char str[100])
{
    printf("%d\n", sizeof(str));
}

输出是4, 数组做参数退化成指针, str是个指针,

struct  A{
  int a;
  char str[3];
  union b{
    unsigned short int c;
   char d;
};
};

struct A aa;问sizeof(aa)几何
4字节对齐的话是12

还有,能否解释一下这个程序的结果?
int len(void *p)
{
    printf("%d\n", sizeof(p));
}的结果是4,换成*p是1

p是指针, 这里*p类型应该自动转化成char

论坛徽章:
0
24 [报告]
发表于 2008-06-01 16:36 |只看该作者
路过学习!!

就像现在的语言能不能描述我们的世界一样!!!??

能那么逻辑上所有都能实现!!!

论坛徽章:
0
25 [报告]
发表于 2008-06-03 00:02 |只看该作者
讨论的挺热烈,顶一下

论坛徽章:
0
26 [报告]
发表于 2008-06-03 08:05 |只看该作者
为啥不用 sizeof

论坛徽章:
0
27 [报告]
发表于 2008-06-03 08:58 |只看该作者
flw 大哥的话
如何知道一个变量是什么类型?
如何知道分配的内存有多大?
如何知道 select 的 fd_set 里哪个句柄是无效的?
如何知道指针是不是有效的?
如何通过 FILE 指针得到文件名?
……
如何知道我昨晚把袜子脱哪儿了?

论坛徽章:
0
28 [报告]
发表于 2008-06-03 10:15 |只看该作者
原帖由 xjtdy888 于 2008-6-3 08:58 发表
flw 大哥的话
如何知道一个变量是什么类型?
如何知道分配的内存有多大?
如何知道 select 的 fd_set 里哪个句柄是无效的?
如何知道指针是不是有效的?
如何通过 FILE 指针得到文件名?
……
如何知 ...

呵呵


不止一个人已经说过答案了,可惜这些人就是不听

对于这种情况,确实让人无奈

论坛徽章:
0
29 [报告]
发表于 2008-06-03 10:28 |只看该作者

回复 #1 packard 的帖子

最后的一个数组元素是已知的某种终结符的话,比如字符串里的'\0',可以用检查是否到达数组结尾的方式得到数组个数嘛。
对数组内容不做任何限制,那就只能是分配时得知大小。比如,你是malloc()来的数组,那就看malloc()的参数呀。

[ 本帖最后由 白丁布衣 于 2008-6-3 10:29 编辑 ]

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
30 [报告]
发表于 2008-06-03 10:31 |只看该作者
如果void *p是动态分配的内存,有个可变通的方法.
重定义malloc和free
在用户数据块前加上字节数头.
定义函数msize来获得此字节数头.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP