为了账号安全,请及时绑定邮箱和手机立即绑定

如何以C来确定数组的大小?

如何以C来确定数组的大小?

C++ C
摇曳的蔷薇 2019-05-30 16:17:42
如何以C来确定数组的大小?如何以C来确定数组的大小?也就是说,数组可以容纳的元素数?
查看完整描述

3 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

执行摘要:

int a[17];size_t n = sizeof(a)/sizeof(a[0]);

全文答覆:

若要确定数组的大小(以字节为单位),可以使用sizeof操作员:

int a[17];size_t n = sizeof(a);

在我的计算机上,INT是4个字节长,所以n是68。

要确定数组中的元素数,可以将数组的总大小除以数组元素的大小。你可以用这个类型来做,就像这样:

int a[17];size_t n = sizeof(a) / sizeof(int);

得到正确的答案(68/4=17),但如果a如果您忘记更改sizeof(int)也是。

因此,首选除数是sizeof(a[0])数组的零元素的大小。

int a[17];size_t n = sizeof(a) / sizeof(a[0]);

另一个优点是,您现在可以轻松地参数化宏中的数组名称,并获得:

#define NELEMS(x)  (sizeof(x) / sizeof((x)[0]))int a[17];size_t n = NELEMS(a);


查看完整回答
反对 回复 2019-05-30
?
aluckdog

TA贡献1847条经验 获得超7个赞

这个sizeof路是对的敌我您正在处理未作为参数接收的数组。作为参数发送给函数的数组被视为指针,因此sizeof将返回指针的大小,而不是数组的大小。

因此,在函数内部,此方法不起作用。相反,始终传递一个附加参数。size_t size指示数组中的元素数。

测试:

#include <stdio.h>#include <stdlib.h>void printSizeOf(int intArray[]);void printLength(int intArray[]);int main(int argc, char* argv[]){
    int array[] = { 0, 1, 2, 3, 4, 5, 6 };

    printf("sizeof of array: %d\n", (int) sizeof(array));
    printSizeOf(array);

    printf("Length of array: %d\n", (int)( sizeof(array) / sizeof(array[0]) ));
    printLength(array);}void printSizeOf(int intArray[]){
    printf("sizeof of parameter: %d\n", (int) sizeof(intArray));}void printLength(int intArray[]){
    printf("Length of parameter: %d\n", (int)( sizeof(intArray) / sizeof(intArray[0]) ));}

输出(在64位Linux操作系统中):

sizeof of array: 28sizeof of parameter: 8Length of array: 7Length of parameter: 2

输出(在32位Windows操作系统中):

sizeof of array: 28sizeof of parameter: 4Length of array: 7Length of parameter: 1


查看完整回答
反对 回复 2019-05-30
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

值得注意的是sizeof在处理已衰变到指针的数组值时,没有帮助:即使它指向数组的开始,但对编译器来说,它与指向该数组的单个元素的指针相同。指针不会“记住”用于初始化它的数组的任何其他内容。

int a[10];int* p = a;assert(sizeof(a) / sizeof(a[0]) == 10);assert(sizeof(p) == sizeof(int*));assert(sizeof(*p) == sizeof(int));


查看完整回答
反对 回复 2019-05-30
  • 3 回答
  • 0 关注
  • 1009 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信