免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
31 [报告]
发表于 2008-06-03 10:34 |只看该作者
另外sizeof是编译器的行为,而非库函数
c89中编译器直接将其用某个常数代替
c99中对于动态数组则用某个表达式代替

论坛徽章:
0
32 [报告]
发表于 2008-06-03 15:32 |只看该作者
原帖由 cobras 于 2008-6-3 10:34 发表
另外sizeof是编译器的行为,而非库函数
c89中编译器直接将其用某个常数代替
c99中对于动态数组则用某个表达式代替


赞同

论坛徽章:
0
33 [报告]
发表于 2008-06-03 16:36 |只看该作者
我所见过的方式有:
1.拦截用户的分配操作,在其中放置元素数量.比如像cobras在31层提到的那样.C中没有constractor的概念,所以自己还得想辙.
2.在文档中与用户建立协议.比如在数组最后一个放置NULL,{NULL},我见过GLib是这样用的.

论坛徽章:
0
34 [报告]
发表于 2009-02-10 20:58 |只看该作者
要是想得到元素个数

        int array[10];
        printf( "array's length is: %d \n", (int *)(*(&array+1))-array );


要是想得到空间大小

        int array[10];
        printf( "array's length is: %d \n", (char *)(*(&array+1))-(char *)array );

论坛徽章:
0
35 [报告]
发表于 2009-02-10 21:00 |只看该作者
It's not a feature that C should have, but it's just a trick you'll work out.

论坛徽章:
0
36 [报告]
发表于 2009-02-10 21:21 |只看该作者
//
// str.cpp
// ~~~~~~~~~~~~~~~~
//
// @author <zhuxueling@pica.com>
// @data   2009-02-10
#include<typeinfo>
#include<iostream>

template< class T,int size>
void print_size( T (&array)[size] ){
    std::cout << "size is " << size << std::endl;

}

int main(){
    const char love[] = "love";
    int   array[]={1,2,3,4,5,6,7,8,9};
    print_size( love);
    print_size( array);
    return 0;
}




$ ./str
size is 5
size is 9
$

论坛徽章:
0
37 [报告]
发表于 2009-02-10 23:07 |只看该作者
--; 想起了flw的签名...

论坛徽章:
5
未羊
日期:2014-08-07 15:42:10双子座
日期:2014-09-23 15:42:172015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:55:282022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32
38 [报告]
发表于 2009-02-10 23:47 |只看该作者
俺感觉比较困难。

论坛徽章:
0
39 [报告]
发表于 2010-06-21 21:45 |只看该作者
本帖最后由 hebeidameng 于 2010-06-21 21:46 编辑

刚也在纠结这个问题,看过两篇帖子了,然后找到一个wiki上一个类似于综述的帖子,但是没有给出C99动态数组中sizeof的实现。
其实,有人在上面提到的,有人早已经给出了答案,我想是因为程序员那种质疑的思维在吧,没有权威,没有确定性的答案似乎没有说明性,下面是连接:http://en.wikipedia.org/wiki/Sizeof
另外gcc的doc里面对变长数组有这样一句话:The length of an array is computed once when the storage is allocated and is remembered for the scope of the array in case you access it with sizeof. (http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html

论坛徽章:
0
40 [报告]
发表于 2010-06-21 22:34 |只看该作者
不可能做到。
指针没有类型,指向的区域内容也不确定。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP