`
李小昂
  • 浏览: 7989 次
  • 性别: Icon_minigender_1
  • 来自: 景德镇
最近访客 更多访客>>
社区版块
存档分类
最新评论

判断一个数组的长度用 Length 还是 SizeOf ?

    博客分类:
  • java
阅读更多

原文地址:http://www.cnblogs.com/del/archive/2008/04/23/1168272.html

 

最近发现一些代码, 甚至有一些专家代码, 在遍历数组时所用的数组长度竟然是 SizeOf(arr); 这不合适!


如果是一维数组、且元素大小是一个字节, 这样用看不出错误, 譬如:

var
  arr1: array[0..9] of Char;
  arr2: array[0..9] of Byte;
begin
  ShowMessageFmt('%d,%d,%d,%d',[Length(arr1), SizeOf(arr1),
                                Length(arr2), SizeOf(arr2)]);
  {显示结果: 10,10,10,10}
end;

 

但如果数组元素多于一个字节、或是多维数组的情况下, 就不行了, 举例:

const
  arr1: array[0..9] of Integer = (1,2,3,4,5,6,7,8,9,10);
  arr2: array[0..1, 0..3] of Integer = ((1,2,3,4), (5,6,7,8));
var
  arr3: array[Boolean] of Integer;
  arr4: array[Byte] of Integer;
begin
  ShowMessage(IntToStr(Length(arr1)));    {10}
  ShowMessage(IntToStr(SizeOf(arr1)));    {40}

  ShowMessage(IntToStr(Length(arr2)));    {2}
  ShowMessage(IntToStr(Length(arr2[0]))); {4}
  ShowMessage(IntToStr(Length(arr2[1]))); {4}
  ShowMessage(IntToStr(SizeOf(arr2)));    {32}

  ShowMessage(IntToStr(Length(arr3)));    {2}
  ShowMessage(IntToStr(SizeOf(arr3)));    {8}

  ShowMessage(IntToStr(Length(arr4)));    {256}
  ShowMessage(IntToStr(SizeOf(arr4)));    {1024}
end;

 

我们倒是可以利用这个原理, 迅速知道多维数组的元素总数:

const
  arr: array[0..1, 0..2, 0..3] of Integer = 
    (((1,1,1,1), (2,2,2,2), (3,3,3,3)), ((4,4,4,4), (5,5,5,5), (6,6,6,6)));
begin
  ShowMessage(IntToStr(SizeOf(arr) div SizeOf(Integer))); {24}
end;

 

 

原文地址:http://wangyang.blog.51cto.com/286310/56268

 

另外:

在Java中, 有一处令人混淆的地方, 就是求String和Array的方式是不同的.

 

对于Array, length是一个数据成员(a data field).

a = new int [100];
a.length;

 

 对于String, length是方法(a method).

String a = "abcde";
a.length();

 

 

分享到:
评论

相关推荐

    结构体中最后一个数组长度为零

    在某些情况下,我们可能需要创建包含可变长度数据的结构体,这时可以使用"结构体中最后一个数组长度为零"的技术。这个技术常用于表示如TLV(Type-Length-Value)格式的数据,其中长度可以根据需要变化。 在提供的...

    字符数组和字符串的sizeof( )和strlen().docx

    `sizeof()`运算符返回一个类型或变量所占用的字节数,而`strlen()`函数则计算一个以空字符'\0'结尾的字符数组的长度。 1. `sizeof()` --- 求所占的字节数 (1)对于整型字符型数组,例如`int A[]`,`sizeof(A)`会...

    CC++中获取数组的长度.pdf

    由于 C/C++ 没有提供直接获取数组长度的函数,因此需要使用其他方法来实现。 1. 使用 `strlen` 函数获取字符串数组的长度 在 C/C++ 中,可以使用 `strlen` 函数来获取字符串数组的长度。例如: ```c char a[] = ...

    个人整理sizeof()用法汇总

    `sizeof()`是一个C++语言中的运算符,用于计算数据类型或者变量所占据的内存空间的大小,单位通常是字节。这个运算符对于理解和优化代码内存使用是非常有用的。下面将详细介绍`sizeof()`的一些主要用法。 1. **与`...

    length of array

    本篇文章将深入探讨如何在C++中获取数组长度,并通过一个使用VS2013编译的示例程序进行解释。 首先,我们要了解C++中的数组声明和初始化。例如,一个整型数组的声明方式如下: ```cpp int arr[5]; ``` 这里,`arr...

    递归打印数组和找出最小数(C语言)

    对于打印数组,我们可以创建一个名为`printArrayRecursively`的递归函数,接受数组、数组长度以及当前处理的元素索引作为参数。初始调用时,索引应为0。函数内部会先打印当前元素,然后调用自身处理下一个元素,直到...

    一个简单的示例代码,展示了如何创建一个数组、初始化它,然后遍历并输出每个元素

    :定义了一个名为 numbers 的整型数组,包含5个元素,分别是1到5。 int array_length = sizeof(numbers) / sizeof(numbers[0]);:计算数组的长度,通过数组总大小除以单个元素的大小得到。 for 循环:用于遍历数组。...

    delph,完成数组保存数据库,并读出数据库数据到数组,使用数据流方式。

    // 根据流的大小计算数组长度 GetMem(Buffer, MemoryStream.Size); try MemoryStream.Read(Buffer^, MemoryStream.Size); // 读取所有数据 Move(Buffer^, Numbers[0], MemoryStream.Size); // 将数据移动到数组...

    【C++】 strlen与sizeof计算char* 与char数组(转载记录) - toby1123yjh的博客 - CSDN

    `sizeof` 是一个编译时运算符,它可以返回一个类型或者变量所占用的内存大小(以字节为单位)。对于数组和指针,`sizeof` 的行为有所不同: - 对于 `char` 数组,`sizeof` 返回整个数组的大小,包括所有元素。例如...

    array size (数组大小测量)2.zip_数组大小测量

    你可以创建一个变量来保存数组长度,或者使用`len()`函数,如`len(arr)`。 8. **Ruby**: Ruby同样使用`length`方法,如`arr.length`,来获取数组的元素个数。 了解如何测量数组大小对于编写高效、内存友好的代码...

    C 语言的数组初始化、索引等操作.docx

    为了代码的可读性和通用性,还可以使用宏定义来获取数组长度: ```c #define LENGTH(array) (sizeof(array) / sizeof(array[0])) int array[] = {1, 2, 3, 4, 5}; int length = LENGTH(array); ``` 总的来说...

    项目中数组的使用

    例如,定义一个包含10个整数的数组: ```java int[] numbers = new int[10]; ``` 在C++或C#中,定义数组的语法稍有不同,但仍保持基本概念: ```cpp int numbers[10]; ``` 2. 初始化数组: 数组可以在定义时直接...

    sizeof 用法汇总 C和C++的语法

    `sizeof`是C和C++中的一个非常重要的运算符,用于获取任何数据类型或变量在内存中占用的字节数。下面将详细讲解`sizeof`的用法。 1. `sizeof`与`strlen`的区别: - `strlen()`函数主要用于计算字符数组(字符串)...

    dotnet C# 将 Byte 二进制数组使用不安全代码快速转换为 int 或结构体数组.rar

    这段代码首先检查Byte数组长度是否能被int的大小整除,然后在栈上分配一个int数组,使用fixed语句固定Byte数组的指针,防止垃圾回收器移动它。接着,我们遍历Byte数组,每次4个字节,将其转换为int并存储到int数组中...

    c代码-判别一个整数数组中各元素的值,若大于 0 则输出该值,若小于等于 0 则输出 0 值

    下面是一个简单的示例,展示了如何遍历数组并根据元素值进行判断: ```c #include int main() { int arr[] = {1, -2, 3, 0, -5, 7}; // 示例数组 int length = sizeof(arr) / sizeof(arr[0]); // 获取数组长度 ...

    数据结构-c语言-带main函数-串1-串的长度-标准库函数strlen()和sizeof()的两种方法。

    在本教程中,我们将探讨如何在C语言中计算字符串的长度,这是数据结构中的一个重要概念,特别是在处理字符数组时。我们将通过两种方法来实现:使用标准库函数`strlen()`和`sizeof()`。 首先,我们来看第一种方法,...

    1.创建数组_数组创建_

    - Java的`length`属性:`arr.length`返回数组长度。 3. **提取数组元素**: - 直接通过索引来访问,如Python的`arr[0]`,C/C++的`arr[0]`,Java的`arr[0]`。 四、其他数组操作 - **遍历数组**:使用循环遍历数组...

    sizeof()用法汇总.doc

    `sizeof(*a)`返回`72`,因为`*a`是一个包含`3*6`个指针的数组,每个指针占据`4`字节。`sizeof(**a)`返回`24`,因为`**a`是一个包含`6`个指针的数组。`sizeof(***a)`返回`4`,因为`***a`是一个指针。`sizeof(****a)`...

    结构体零长度数组的意义(深入)1

    这个结构体的最后一个成员是可变长的数组,对于 TLV(Type-Length-Value)形式的结构,或者其他需要变长度的结构体,用这种方式定义最好。 使用这种方式定义结构体的好处是非常明显的。创建时,可以使用 malloc ...

    C#结构体和C++字节数组的转换

    这里的`BytesToStruct`方法接受一个字节数组和结构体的`Type`对象,首先检查字节数组的长度是否足够,然后分配内存,将字节数组的内容拷贝到内存,接着使用`Marshal.PtrToStructure`将内存中的数据转换为指定类型的...

Global site tag (gtag.js) - Google Analytics