C语言中结构体数组长度怎么计算?

发布于 2022-08-28 11:12:34 字数 535 浏览 27 评论 0

就类似于:

length=(sizeof(array)/sizeof(array[0]));

(array是已定义并赋值的数组)

对于结构体数组应该怎么操作?

代码中数据比较多,我就简单的把这部分功能的代码发上来。
就是希望可以得到array这个数组的长度。

#include <stdio.h>
typedef struct subject{
    char name[10];
    double score;
} SUB;
SUB array[]={
    {"语文",0},{"数学",0},{"英语",0}
};
int length(SUB a[]){
    return (int)(sizeof(a)/sizeof(a[0]));
}
int main(){
    int i;
    i=length(array);
    printf ("%d",i);
    return 0;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

和影子一齐双人舞 2022-09-04 11:12:34

修正:还是去掉会迷惑新手的内容吧,不谈C99变长数组的GCC Extension了。

你这代码的错误在于,将函数参数声明成数组类型,在C标准中,将参数声明成数组类型等同于声明成指针类型,下面两个声明是等价的:

int length(SUB a[]);
int length(SUB *a);

而你在length里写sizeof(a),sizeof不是function,它只有两种形式:

  1. sizeof unary-expression
  2. sizeof ( type-name )

你在函数中写个 sizeof(a),等同于写sizeof(SUB *),a的类型是SUB *,所以得到的结果是指针的大小,而sizeof(a[0]),等同于sizeof(SUB)。怎么可能正确呢?

C中定义数组,习惯用#define N 3这种形式将长度定义成常量。如果数组长度是编译器察看后面初始化式自动计算出来的,也可以这样写啊:

#define ARRAY_LEN (sizeof(array)/sizeof(array[0]))

sizeof不是函数!它的返回值是编译时期,编译器计算出来的!对于sizeof(array),它是第一种形式,编译器相当于作了这样的操作:先得到array的类型SUB array[4],然后再计算sizeof(SUB array[4])。C语言中数组定义时都是有大小的,所以这种计算一定OK

简而言之,在C语言中,你无法写出这样的工具函数int length(Type a[]);

只是我以为 2022-09-04 11:12:34

想不明白,楼主这是自问自答吗?更何况,何不实践下,just do it!

囚我心虐我身 2022-09-04 11:12:34

和普通的一样~没特殊的地方

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文