| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 2976 人关注过本帖
标题:用 sizeof 输出变长数组长度,结果为 0 ?
取消只看楼主 加入收藏
muyoucumian
Rank: 3Rank: 3
等 级:等待验证会员
帖 子:80
专家分:126
注 册:2014-8-30
结帖率:100%
收藏
 问题点数:0 回复次数:4 
用 sizeof 输出变长数组长度,结果为 0 ?
我把n改成100,马上输出正确值100,这说明sizeof对定长数组是这样用的。

//直接上代码

程序代码:
    int n = 0;
    char a[n];    //定义一个变长数组,接收字符输入
    char *p = a;
    char ch;

    printf("Enter a message: ");
    ch = getchar();
    while (ch != '\n'){        //将输入的字符放到数组中
        n++;
        *p = ch;
        p++;
        ch = getchar();
    }

    printf("%d\n", sizeof(a));    //这里输出的数值应该是输入的字符的个数,可是为什么输出是0呢?(sizeof(char)的值是1,就不去除他了)

2014-09-26 13:16
muyoucumian
Rank: 3Rank: 3
等 级:等待验证会员
帖 子:80
专家分:126
注 册:2014-8-30
收藏
得分:0 
变长数组是不完全数据类型,sizeof也不知道他的长度。
翻译:变长数组的长度就像盒子里的巧克力,sizeof也不知道下一块是什么味。
2014-09-26 13:24
muyoucumian
Rank: 3Rank: 3
等 级:等待验证会员
帖 子:80
专家分:126
注 册:2014-8-30
收藏
得分:0 
回复 3 楼 rjsp
从才没用p去改变他的尺寸呢,我用n去改变他的尺寸,哈哈
2014-09-26 13:37
muyoucumian
Rank: 3Rank: 3
等 级:等待验证会员
帖 子:80
专家分:126
注 册:2014-8-30
收藏
得分:0 
回复 6 楼 rjsp
变长数组是不完全数据类型,不能使用sizeof获得它的大小。
来自:http://blog.  《例解GNU C之零长数组与变长数组》

C/C++中的不完全类型[编辑]
C/C++中不完全类型有三种不同形式: void、未指定长度的数组以及具有非指定内容的结构和联合。使用不完全类型的指针或引用,不需要知道类型的全部内容。另外也用于解决对象类型及其成员之间的类型循环依赖。
来自: http://zh. 《不完全类型》
2014-09-26 14:41
muyoucumian
Rank: 3Rank: 3
等 级:等待验证会员
帖 子:80
专家分:126
注 册:2014-8-30
收藏
得分:0 
回复 5 楼 lwei
那我就用n标记数组的长度好了,不然我也不知道数组有多长
2014-09-26 14:46
快速回复:用 sizeof 输出变长数组长度,结果为 0 ?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013594 second(s), 8 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved