原文地址: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()`函数则计算一个以空字符'\0'结尾的字符数组的长度。 1. `sizeof()` --- 求所占的字节数 (1)对于整型字符型数组,例如`int A[]`,`sizeof(A)`会...
由于 C/C++ 没有提供直接获取数组长度的函数,因此需要使用其他方法来实现。 1. 使用 `strlen` 函数获取字符串数组的长度 在 C/C++ 中,可以使用 `strlen` 函数来获取字符串数组的长度。例如: ```c char a[] = ...
`sizeof()`是一个C++语言中的运算符,用于计算数据类型或者变量所占据的内存空间的大小,单位通常是字节。这个运算符对于理解和优化代码内存使用是非常有用的。下面将详细介绍`sizeof()`的一些主要用法。 1. **与`...
本篇文章将深入探讨如何在C++中获取数组长度,并通过一个使用VS2013编译的示例程序进行解释。 首先,我们要了解C++中的数组声明和初始化。例如,一个整型数组的声明方式如下: ```cpp int arr[5]; ``` 这里,`arr...
对于打印数组,我们可以创建一个名为`printArrayRecursively`的递归函数,接受数组、数组长度以及当前处理的元素索引作为参数。初始调用时,索引应为0。函数内部会先打印当前元素,然后调用自身处理下一个元素,直到...
:定义了一个名为 numbers 的整型数组,包含5个元素,分别是1到5。 int array_length = sizeof(numbers) / sizeof(numbers[0]);:计算数组的长度,通过数组总大小除以单个元素的大小得到。 for 循环:用于遍历数组。...
// 根据流的大小计算数组长度 GetMem(Buffer, MemoryStream.Size); try MemoryStream.Read(Buffer^, MemoryStream.Size); // 读取所有数据 Move(Buffer^, Numbers[0], MemoryStream.Size); // 将数据移动到数组...
`sizeof` 是一个编译时运算符,它可以返回一个类型或者变量所占用的内存大小(以字节为单位)。对于数组和指针,`sizeof` 的行为有所不同: - 对于 `char` 数组,`sizeof` 返回整个数组的大小,包括所有元素。例如...
你可以创建一个变量来保存数组长度,或者使用`len()`函数,如`len(arr)`。 8. **Ruby**: Ruby同样使用`length`方法,如`arr.length`,来获取数组的元素个数。 了解如何测量数组大小对于编写高效、内存友好的代码...
为了代码的可读性和通用性,还可以使用宏定义来获取数组长度: ```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`的用法。 1. `sizeof`与`strlen`的区别: - `strlen()`函数主要用于计算字符数组(字符串)...
这段代码首先检查Byte数组长度是否能被int的大小整除,然后在栈上分配一个int数组,使用fixed语句固定Byte数组的指针,防止垃圾回收器移动它。接着,我们遍历Byte数组,每次4个字节,将其转换为int并存储到int数组中...
下面是一个简单的示例,展示了如何遍历数组并根据元素值进行判断: ```c #include int main() { int arr[] = {1, -2, 3, 0, -5, 7}; // 示例数组 int length = sizeof(arr) / sizeof(arr[0]); // 获取数组长度 ...
在本教程中,我们将探讨如何在C语言中计算字符串的长度,这是数据结构中的一个重要概念,特别是在处理字符数组时。我们将通过两种方法来实现:使用标准库函数`strlen()`和`sizeof()`。 首先,我们来看第一种方法,...
- Java的`length`属性:`arr.length`返回数组长度。 3. **提取数组元素**: - 直接通过索引来访问,如Python的`arr[0]`,C/C++的`arr[0]`,Java的`arr[0]`。 四、其他数组操作 - **遍历数组**:使用循环遍历数组...
`sizeof(*a)`返回`72`,因为`*a`是一个包含`3*6`个指针的数组,每个指针占据`4`字节。`sizeof(**a)`返回`24`,因为`**a`是一个包含`6`个指针的数组。`sizeof(***a)`返回`4`,因为`***a`是一个指针。`sizeof(****a)`...
这个结构体的最后一个成员是可变长的数组,对于 TLV(Type-Length-Value)形式的结构,或者其他需要变长度的结构体,用这种方式定义最好。 使用这种方式定义结构体的好处是非常明显的。创建时,可以使用 malloc ...
这里的`BytesToStruct`方法接受一个字节数组和结构体的`Type`对象,首先检查字节数组的长度是否足够,然后分配内存,将字节数组的内容拷贝到内存,接着使用`Marshal.PtrToStructure`将内存中的数据转换为指定类型的...