C语言能得到数组的长度么?

弼马温 2011-11-24 01:31:33
我看书上好像可以通过sizeof关键字得到数组长度,那为什么一般使用数组的时候要手动传入数组长度呢?比如main函数的参数为main(char** args, int len)菜鸟提问,不要笑我!!!
...全文
857 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
luotuo44 2011-11-24
  • 打赏
  • 举报
回复
sizeof是能得到数组的大小,但得不到指针所指向的数组的大小(你可以定义一个指针,然后令其指向一个数组,再用sizeof,会发现不是数组的大小)。用数组作为函数参数时,其实传递的是一个指针。所以,需要手动数组长度。
楼主可以去百度百科查看sizeof词条。
yuxuan555269 2011-11-24
  • 打赏
  • 举报
回复
呃,问个问题还吵上了???
righthook8 2011-11-24
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 sukiida 的回复:]
引用 13 楼 antineutrino 的回复:

12楼典型的装13,不懂装懂

我觉得也是,有话就好好说,要不就飘过
[/Quote]
滚尼玛的,劳资的经验,尼玛应届生一个,爱听不听!!
mars1227 2011-11-24
  • 打赏
  • 举报
回复
把数组全部存为字符串组。。。。 然后换成ASCII码来调用。。

这时候都是以 \0结尾的了。。 哈哈 突发奇想而已
苏客达 2011-11-24
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 antineutrino 的回复:]

12楼典型的装13,不懂装懂
[/Quote]
我觉得也是,有话就好好说,要不就飘过
恩恩古惑 2011-11-24
  • 打赏
  • 举报
回复
因为你main(int argc, char *argv[])中的argv是指针 并不是数组名! 所以sizeof(argv)得到的长度在32位平台上会是4
righthook8 2011-11-24
  • 打赏
  • 举报
回复
我真的没看到在IDE里SIZEOF显示的是蓝色,,,
hondely 2011-11-24
  • 打赏
  • 举报
回复
sizeof 不是函数哦
自己到百科里面看下
FrankHB1989 2011-11-24
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 hondely 的回复:]

string里面有个 函数可以得到长度
C/C++ code

string str;
int len=str.size();
[/Quote]
既然LZ问的是C,就不用.size()了。
hondely 2011-11-24
  • 打赏
  • 举报
回复
string里面有个 函数可以得到长度

string str;
int len=str.size();
FrankHB1989 2011-11-24
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 frankhb1989 的回复:]

VLA什么的不论,C的数组类型是编译期确定的,传参时退化为指针丢失了长度信息,也不会隐式地放到运行时环境中,所以如果要用需要手动传入。编译期根据特定类型计算大小的sizeof在函数内部当然用不了,即使用了拿到的也是指针占的大小,而不是数组的。
[/Quote]
本来我已经三连了,该感谢你断楼么。
我不会显摆我知道它不是函数。我只是囗观一下连这种常识都说不清楚(虽然暂时不清楚是不是只是说不清楚)的假内行而已。
FrankHB1989 2011-11-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 smoke_1988 的回复:]
我看书上好像可以通过sizeof关键字得到数组长度,那为什么一般使用数组的时候要手动传入数组长度呢?比如main函数的参数为main(char** args, int len)菜鸟提问,不要笑我!!!
[/Quote]
另外main的一个常见形式是int main(int argc, char* argv[]);,目测LZ写反了。
righthook8 2011-11-24
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 frankhb1989 的回复:]
引用 15 楼 righthook8 的回复:

引用 13 楼 antineutrino 的回复:
12楼典型的装13,不懂装懂

你可以不传,不传也不会错,我知道你会像楼上说的用sizeof或者什么JB的strlen去求,用吧,那两个函数你随便用,
呆货!!

sizeof是函数?
233
[/Quote]
敢问您老人家想说点什么呢?-----莫不是显摆一下你知道它不是函数就算了吧
FrankHB1989 2011-11-24
  • 打赏
  • 举报
回复
VLA什么的不论,C的数组类型是编译期确定的,传参时退化为指针丢失了长度信息,也不会隐式地放到运行时环境中,所以如果要用需要手动传入。编译期根据特定类型计算大小的sizeof在函数内部当然用不了,即使用了拿到的也是指针占的大小,而不是数组的。
FrankHB1989 2011-11-24
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 righthook8 的回复:]

引用 13 楼 antineutrino 的回复:
12楼典型的装13,不懂装懂

你可以不传,不传也不会错,我知道你会像楼上说的用sizeof或者什么JB的strlen去求,用吧,那两个函数你随便用,
呆货!!
[/Quote]
sizeof是函数?
233
righthook8 2011-11-24
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 antineutrino 的回复:]
12楼典型的装13,不懂装懂
[/Quote]
你可以不传,不传也不会错,我知道你会像楼上说的用sizeof或者什么JB的strlen去求,用吧,那两个函数你随便用,
呆货!!
langyano1 2011-11-24
  • 打赏
  • 举报
回复
main(char** args, int len),这个len不是长度吧
Antineutrino 2011-11-24
  • 打赏
  • 举报
回复
12楼典型的装13,不懂装懂
righthook8 2011-11-24
  • 打赏
  • 举报
回复
C中传Buffer,不要忘记同时传入Bufffer的size!!!
仅仅是好的编程规范中的一条,有你学的,慢慢积累吧,至于为什么这样做,自己写多了就知道作用了
Usopp_Dream 2011-11-24
  • 打赏
  • 举报
回复
strlen和sizeof(数组名)/sizeof(数组类型)都能得到所要的长度
加载更多回复(15)

69,382

社区成员

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

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