C语言求数组函数问题

lingyue1012 2012-11-02 03:46:34

#include<stdio.h>
int main()
{
int i[] = {1, 1, 3, 4, 5};
printf("lenth_a=%i,lenth_i=%i", getLenth(i), sizeof(i)/sizeof(i[0]));
return 0;
}
int getLenth(int a[]) //实现得到数组的长度的函数
{
return sizeof(a);
}

C语言(不是C++)难道不能实现这个功能吗?如果能,怎么实现呢?
...全文
153 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lingyue1012 2012-11-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

int a[]会退化成指针的
[/Quote]


#include<stdio.h>
#define getLen(arr) (sizeof(arr)/sizeof(arr[0]))

int getLenth(int a[])
{
printf("addr_a=%x,value_a=%i\r\n", a, *a);
return sizeof(a);
}

int main()
{
int i[] = {112,2,3};
printf("fuc_lenth=%i,macro_lenth=%i\r\n", getLenth(i), getLen(i));
return 0;
}



确实,变成了数组的第0个元素。

wjain 2012-11-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

int a[]会退化成指针的

一般求数组个数就用宏,
#define getLenth(i) sizeof(i)/sizeof(i[0])
[/Quote]
顶`~



int getLenth(int a[]) //等同于 int getLenth(int* a)
{
return sizeof(a);
}


在做参数的时候`也仅仅在这个时候`数组等同于指针.
dpdp_2012 2012-11-02
  • 打赏
  • 举报
回复
C C++都是一样
实参要么是值要么是地址,数组名传到函数参数是一个指针,对32位地址永远都是4,所以不管你的数组a有多长,返回的都是4
ouyh12345 2012-11-02
  • 打赏
  • 举报
回复
一般求数组个数就用宏,
#define getLenth(i) sizeof(i)/sizeof(i[0])
ouyh12345 2012-11-02
  • 打赏
  • 举报
回复
int a[]会退化成指针的

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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