求一关于数组的函数

nowfox 2003-08-20 11:04:54
小弟刚学C,请问有没有返回一个数组有多少元素的函数,就像VB里的UBound()
若有,望告知;
若没有,望哪位大虾帮忙写一个。
在下先谢过。
...全文
32 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cccloveyf 2003-08-20
  • 打赏
  • 举报
回复
如果是刚才楼主说的这种:

在用数组之前我当然会指明维数的,但假如用
char c[]={"I am happy"};
就用这个来算算也不错。

情况,由于是指定了字符数组,所以就好判断多了,就用'\0'来做标记,用一个循环就出来了。
:)
cccloveyf 2003-08-20
  • 打赏
  • 举报
回复
C++标准库里的提供的vector类倒是提供了一种替代,其中“对象.size()”能够返回其长度,但是要是字符串的话返回“长度-1”,其中'\0'没有算。
呵呵,要是C嘛,就得自己写一个了。
oopig 2003-08-20
  • 打赏
  • 举报
回复
补充说明一下,我上面说的“没有”是针对一般情况,即动态数组的情况。对于静态数组,把它写出来的时候就知道它的大小了,所以讨论如何获得静态数组的长度没有什么意义。
nowfox 2003-08-20
  • 打赏
  • 举报
回复
呵呵,谢谢两位的解答,这个问题来自我做网页(ASP的),要判断用户到底选了几项,之前我不可能预知,但可用UBound()即可。现在我开始转学C,在书上没有看到这个函数,于是就问问啦。
在用数组之前我当然会指明维数的,但假如用
char c[]={"I am happy"};
就用这个来算算也不错。
oopig 2003-08-20
  • 打赏
  • 举报
回复
答案是:没有。
不过有一个替代的办法,在数组的最后一个元素放上一个特殊的标记,读到这个标记的时候就知道数组结束了。
举个例子:
int age[] = {10, 20, 16, 40, 29, -1}; /* -1是特殊标记,表示数组结束 */
int get_size(int age[]) /* 利用结束标记计算数组长度 */
{
int count = 0;
while (age[count] != -1)
count++;
return count;
}
aflyinghorse 2003-08-20
  • 打赏
  • 举报
回复
int a[] = {0,1,2};
sizeof(a) / sizeof(a[0])的值为3

把数组作为参数是不正确的。
下面的函数不正确,它的返回值为1
因为它被编译器看作int arraySize(int *a);
其中参数 int *a 指向数组第一个元素,
所以sizeof(a)为指针大小4,而sizeof(a[0])为整形大小4
因此结果是1
int arraySize(int a[])
{
return sizeof(a) / sizeof(a[0]);
}
bgu 2003-08-20
  • 打赏
  • 举报
回复
我对C也不是很熟。
只知道C++里有size(),在C里没有。
不过楼主如果要的话可以用个循环可以解决吧。关键字是\0

还有,请问楼主,你的数组不定义大小也可以用的么?
晨星 2003-08-20
  • 打赏
  • 举报
回复
int a[] = {……};
int size = sizeof(a) / sizeof(a[0]);

只能用于静态数组,而且作为指针传入函数就不灵了。
不过除了上面这种情况外,在C里,不管是动态数组还是静态数组,都需要明确指定维数的,难道你自己不知道你自己数组的维数吗?为什么非要到时候临时算呢?

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧