求数组的长度【转】
(转自:https://blog.csdn.net/coderma4k/article/details/79184703)
常见的数组就是字符数组和整型数组,今天给大家介绍两种求数组长度的方法。
一.、sizeof函数
同个这个函数可以求得这两种类型的数组的长度。
首先sizeof的功能是返回一个对象或者类型所占的内存字节数。
所以我们可以通过以下代码来获取数组的长度
sizeof(数组名)/sizeof(数组类型)
-
int arr[] = {1,2,3,4,5}; -
char c[] = "hello world"; -
printf("%d",sizeof(arr)/sizeof(int)); -
printf("%d",sizeof(c)/sizeof(char));
通过上述的方式我们可以类比到任何求数组长度的地方上去,除此之外,有两点需要注意。
1. 通过上述方式求得字符数组的长度总是比我们想得到的多了一,是因为字符数组在最后一位默认有一个\0的空字符,
所以比我们想象中的大了一,还要说的是\0 的作用就是标记结束,当我们使用printf 或者是puts 函数将字符数据进行输出
的时候,就是通过末位的\0来标记结束的, 如果没有\0 的话,输出结果的末尾会是乱码,所以在声明数组的时候我们需要
将数组的大小声明比我们需要的大一位, 我们使用scanf或者是gets 函数它们会默认在最后一位填上\0。
2. 上述的这个方法不适用与将数组传到函数中,在函数中使用此方法求数组的长度,结果是错误的。
不妨大家可以试试以下代码
-
#include -
using namespace std; -
template -
int getArrayLength(T arr[]) { -
int length = sizeof(arr)/sizeof(T); -
return length; -
} -
int main() { -
int arr[] = {1,2,3,4,5}; -
char c[] = "hello world"; -
printf("%d\n",sizeof(arr)/sizeof(int)); -
printf("%d\n",sizeof(c)/sizeof(char)); -
printf("%d\n",getArrayLength(arr)); -
printf("%d\n",getArrayLength(c)); -
return 0; -
}
二、strlen
strlen函数只适用于求字符数组的长度,而且他返回的是第一个\0之前的字符长度,不需要考虑\0
另外使用strlen函数需要引入string.h头文件
代码如下
-
#include -
#include -
using namespace std; -
template -
int getArrayLength(T arr[]) { -
int length = sizeof(arr)/sizeof(T); -
return length; -
} -
int main() { -
int arr[] = {1,2,3,4,5}; -
char c[] = "hello world"; -
printf("%d\n",sizeof(arr)/sizeof(int)); -
printf("%d\n",sizeof(c)/sizeof(char)); -
printf("%d\n",strlen(c)); -
return 0; -
}
综上所述,如果相求int类型的数组推荐使用sizeof来求,对于求字符数组推荐使用strlen来求
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
