妙用sizeof获得数组长度

总所周知,sizeof关键字返回一个类型的长度。于是,一些聪明的人就想出了用sizeof(array) /
sizeof(array[0])来获取array数组的长度。这个表达式十分巧妙。第一个sizeof(array)返回array的长度,第二个sizeof(array[0])返回array每个元素的类型的长度。将数组的总长除以其中每个元素的长度,就可以得出该数组的长度。


写个小程序试一下,可行。
那么,指针数组行不行呢?


咦,这次怎么失败了?用printf看一下。

int类型的array[0]占4个字节,int *类型的array为什么也占4个字节呢?如果把数组的长度改一下,会不会变化呢?


原来int
*的长度与int一样,都是4字节。所以,这种方法只适用与普通数组。在对待指针数组时,我们不能用这个方法来取得数组长度。

时间: 2024-11-08 11:10:08

妙用sizeof获得数组长度的相关文章

你必须知道的指针基础-4.sizeof计算数组长度与strcpy的安全性问题

一.使用sizeof计算数组长度 1.1 sizeof的基本使用 如果在作用域内,变量以数组形式声明,则可以使用sizeof求数组大小,下面一段代码展示了如何使用sizeof: int nums[] = {11,22,33,44,55,66}; int i; // sizeof(nums) 计算nums数组的总字节数 // sizeof(int) 计算int类型所占用的字节数 int length = sizeof(nums)/sizeof(int); for(i=0;i<length;i++)

sizeof与数组长度

代码: #include <stdio.h> #include <stdlib.h> #define LENGTH 10 void func(int arr[]); int main(void) { int arr[LENGTH] = { 0 }; // sizeof 数组名:整个数组大小 // sizeof 数组名[0]:数组第一个元素大小 size_t length = sizeof arr / sizeof arr[0]; printf(length == LENGTH ? 

sizeof() 之 数组

在平时的编程中,我们会经常用到数组,并且需要知道数组的长度,有时我们可以明确的知道数组的长度,但有时并不,这时,可以借用sizeof(),来获得数组的长度,如下: arrayLength = sizeof(array) / sizeof(array[0]); 在使用sizeof() 获得数组长度时,需要注意,如果数组array 和 sizeof() 的使用 是在同一个文件中,那么array在定义时,不需要明确数组长度:如果他们在不同的文件中时,则array在定义时必须明确长度,否则会报错 “ i

求数组长度sizeof

当数组当作参数传递时,它就退化成指针了,要求数组长度的话,可以在main函数内部求得 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> void fun(int arr[], int len) {     printf("---%d\n", sizeof(arr));     printf("---%d\n", sizeof(arr[0]));    printf("---len = %d

C语言中,当计算字符数组长度时,用sizeof 和strlen 的原理及两者的区别

字符数组的长度计算:必须以终止符'\0'作为边界,但对字符数组赋值时,有两种方式: 1:定义时用字符初始化 (1)char chs[7] = {'a', 'c', '0', 'z', '3','d'}; // 长度为6 上式等价于: (2)char chs[7] = {'a', 'c', '0', 'z', '3','d', '/0'}; // 长度为6 也等价于: (3)char chs[] = {'a', 'c', '0', 'z', '3','d', '/0' }; // 长度为6 但不等

C++ 取得数组长度

C++中没有提供 直接获取数组长度的函数,对于存放字符串的字符数组提供了一个strlen函数获取长度,那么对于其他类型的数组如何获取他们的长度呢?其中一种方法是使 用sizeof(array) / sizeof(array[0]), 在C语言中习惯上在 使用时都把它定义成一个宏,比如#define GET_ARRAY_LEN(array)  (sizeof(array) / sizeof(array[0])) . 而在C++中则可以使用模板 技术定义一个函数,比如: template <clas

C++ 数组长度 以及 数组名作为参数 传递给函数

在看排序,首先是插入排序,思路理清后想用代码实现,然后问题来了: 如何求数组长度? 如果没记错,在Java中应该是有直接可用的方法的, Python中(序列)也有.len,在C/C++中,字符串倒是有strlen() (需要#include <string.h>) 一个办法是用 sizeof() 一.首先定义数组 int array[] = {18,10,15,7,1}; 一开始想都没想就直接在子函数里面 int array_length(int a[]){ int len = sizeof(

C++面试题5:建议在函数里面不要用sizeof算数组的大小

C++面试题5:建议在函数里面不要用sizeof算数组的大小 #include <iostream>using namespace::std; void foo(const int[]); int main() { int arr[3] = {1,2,3}; cout<<"in main array size: "<<sizeof(arr)/sizeof(int)<<endl; foo(arr); } void foo(const int

C++获取数组长度

1.获取字符数组长度 char a[]="abcdef"; int length1=sizeof(a)/sizeof(a[0]); cout<<"a"<<length1<<endl; length1为7. cout<<"a"<<strlen(a)<<endl; 输出6 注:string不能用strlen函数 2.获取字符串string长度 #include <strin