C语言,数组用什么函数,计算c 数组长度函数

c语言中求数组长度的问题
求数组长度的方法有两种& 第一种是
&&&&&&&&&int
array[n];&
strlen(array);//这个方法可以求得字符串数组的长度
char sizeof(array);
sizeof(array);//可以求的数组的长度
char array[200]={'0','2','q','w','e','r'};
用strlen(array);得到的结果是6
而用sizeof(array);得到的结果是200
注意:strlen()函数是&
string.h库中的,想要使用让必须在开始引入此头文件代码如下
#include&string.h&
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。"c语言检测数组长度函数"的糗事
你可能感兴趣:
糗事百科为大家收集了很多的c语言检测数组长度函数的糗事,各种关于c语言检测数组长度函数的爆笑经历、尴尬时刻和开心视频,想持续关注c语言检测数组长度函数的糗事就收藏本页吧.
扫码下载糗事百科appC语言中strlen函数可以用来测量数组的长度吗_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
C语言中strlen函数可以用来测量数组的长度吗
我有更好的答案
strlen只可以用来测量char*字符串的长度,求数组长度(比如int a[])要用sizeof(a)/sizeof(int)
采纳率:74%
来自团队:
不能BTW,数组长度不是在定义时就给出了么?
1条折叠回答
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包C语言中如何求任意一个int型数组的长度_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C语言中如何求任意一个int型数组的长度
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢trackbacks-0
近来在写程序的时候遇到了一个问题,就是传递一个数组指针进入一个函数的时候,虽然指针能够顺利的传递,但是,我们无法求出该数组的大小。见下面的代码:
#include&&stdio.h&void&setNum(int&*p,int&a);void&setNum(int&*p);int&main(){&&&&int&a[]&=&{<span style="COLOR: #,<span style="COLOR: #,<span style="COLOR: #,<span style="COLOR: #};&&&&printf("%d\n",sizeof(a)/sizeof(a[<span style="COLOR: #]));&&&&setNum(a);}void&setNum(int&*p,int&a){&&&&*p&=&a;}void&setNum(int&*p){&&&&int&Num&=&sizeof(p)/sizeof(p[<span style="COLOR: #]);&&&&printf("%d\n",Num);}
结果是,输出分别是4和1.原因分析:1.对于第一个输出,由于在main函数中定义的为数组,所以可以直接利用sizeof函数来求出a数组的长度。2.对于传递参数类型,比如上面的setNum函数(未传递个数版本),此时,调用该函数的时候,a退化为一个普通的指针,也就是说,此时sizeof(p)求出来的就是一个指针的大小,除以int的大小,恰好为1.启示:C语言中,不能够根据一个数组指针就求出来任意一个数组的大小。解决办法就是传第一个参数进来,指定大小。ps:参考资料(详实):摘录:& & 如果作为函数的参数是没法求的,&& & 但这样是可以的:&& &&& & #define & LENGTH(s) & (sizeof(s) & / & sizeof(int))&& &&& & int & s[12];&& & int & length & = & LENGTH(s);&==================================================&这样的方法只能用于数组变量的数组名,对于指向数组的指针,以及作为参数的数组名都是没有效果的,上面已经有人解释了&》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》不可能有办法的。&当你定义一个数组的时候:&int & a[] & = & {1, & 2, & 3}; & & // & 实际上被编译为 & int & a[3] & = & {1,2,3}&数组名代表的是数组的地址。注意 & —— & 你绝对没有办法通过数组名动态获得数组的大小。当你丢失a的长度信息的时候,你永远不可能知道他的长度。&那么 & sizeof & 是怎么回事呢?他不是通过 & a & 的名字获得 & a的大小了么? & —— & 大错特错!&关键字 & sizeof & 产生的是一个编译期常量(注1) & 他的运作方式是这样的:&当你写:&sizeof & a &&实质是:&sizeof & ( & a的类型 & )&而a的类型是什么呢?编译器察看 & a的定义发现, & 是 & int & [3]&就是说,这里 & sizeof & a & 实质是:&sizeof & ( & int[3] & )&完全等同于常量 & 12 & (假定int为4字节)。&考虑一个函数&void & func( & int & a[] & ); & &&// & 写成 & int & a[3] & 也不会有本质区别——也许你该试试写成 & int & (&a) & [3] & ?&C++规定,数组作为形参的时候,a代表数组首地址。&他的底层意义是: & a & 退化为了一个4字节的指针,没有任何变量表示数组的大小会&#8220;自动&#8221;被传递进来。&我们看看这个时候 & sizeof & a是什么:&sizeof( & 函数形参的a[] & ) & & = & sizeof( & int* & const & ) & = & 4 & & // & 当然a[]不是合法的C++类型&仍然不服气?好——我们反问一个问题:若你是C & /C++的设计者, & 你怎么在兼容原有设计的基础上让void & func( & int & a[] & )同时传递地址和大小?&首先,a是一个变量,而且类似数组。他必须是一个地址,否则你不知道如何索引元素。&他怎么再带上一个变量表示他的大小呢?&扩充 & sizeof & (a) & 的能力?&sizeof & a & 必须产生代码——不管是常量还是什么。 & 要让他在运行时决定 & a的值, & a就必须带上他的大小信息。 &&1 & 你必须修改C标准,让C支持&#8220;两种&#8221;数组。一种是定义处的数组,他分配大片连续内存,和原来的C标准相同。&2 & 另一种是作为参数传递数组。 & 你必须传递地址和数组大小;这个数组实际上是一个8字节的结构{ & 地址; & 大小}(事实上可能更加复杂,考虑多纬数组如何实现? & ) &&3 & 系统必须根据两种不同数组分别实现其 & []、* & 、&等。 & 原有的数组根据其首地址偏移(这是个常量)和下标寻址; & 而参数数组则首先取&#8220;地址&#8221;内容(这是个变量),然后根据这个地址寻址....&厄... & 再考虑多维数组——听起来这不是一整套vector模型么?&-----------------------------------------------&注1: & 对于C99支持的 & flexible & array & ,其 & sizeof & 运算是运行时求值
阅读(10331)
2011年10月
2526272829301236789101112131415161718202124252627283112345
留言簿(11)
随笔分类(87)
随笔档案(145)
文章分类(70)
文章档案(70)
ACM与算法比赛
LaTex和Tex学习
电子书下载
英语网站(长期学习)
积分与排名
阅读排行榜
评论排行榜

我要回帖

更多关于 c语言数组长度函数 的文章

 

随机推荐