关于c语言数组名求sizeof的问题

woaitmac1314 2010-04-24 06:13:28
有这么一个程序:
char* bname[]={"ccccc","bbbbb","csssaaa"};
int m;
m=sizeof(bname)/sizeof(char*);


m=sizeof(bname)/sizeof(char*); 这句话是求数组bname中字符串的个数,
我不是很理解,bname是指针数组的数组名,应该是一个二级指针吧?sizeof(bname)是什么意思呢?
是不是只要sizeof(数组名)返回的就是数组名指针指向的联系内存区域的大小?
...全文
350 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangweiit 2010-04-25
  • 打赏
  • 举报
回复
应该是一个二级指针吧?
不是二级指针
二级指针与指针数组是不一样的

sizeof(bname)是什么意思呢?
这里将得到bname这个指针数组战用的字节数,因为有三个元素,所以,就是3 个 sizeof(char*)
bname里面,只包含三个字符的指针,而不是内容

补充一句,如果 char **bname,sizeof(bname)的结果是什么呢? 4
十八道胡同 2010-04-25
  • 打赏
  • 举报
回复
[]的优先级高于*
所以char* bname[]解释为bname是一个数组,数组的每个元素是指向char 的指针。
sizeof(bname)就是求指针数组的大小
除以sizeof(char*)就是数组的个数
delphiwcdj 2010-04-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 cattycat 的回复:]

这里sizeof(bname)是指针数组的大小,除以sizeof(char*)就是数组的个数
[/Quote]
up
brk1985 2010-04-25
  • 打赏
  • 举报
回复
搭车问下,为什么 sizeof(bname)会是12,难道是这样计算:sizeof(bname[0])、sizeof(bname[1])、sizeof(bname[2])之和?
  • 打赏
  • 举报
回复
对于指针类型要和普通类型区分开...
可以这么理解:typedef char* CHARPTR;
CHARPTR bname[]={"ccccc","bbbbb","csssaaa"};
int m;
m=sizeof(bname)/sizeof(CHARPTR);
这样就没问题了吧...
JSGYXYCZ 2010-04-24
  • 打赏
  • 举报
回复
bname不是2级指针,否则sizeof(bname)是算的指针变量所占用的字节数。
cattycat 2010-04-24
  • 打赏
  • 举报
回复
这里sizeof(bname)是指针数组的大小,除以sizeof(char*)就是数组的个数
findcsdn 2010-04-24
  • 打赏
  • 举报
回复
m=sizeof(bname)/sizeof(char*);

bname是数组名,程序运行时可以认为是指针。
sizeof 是编译时计算的值,所以编译器可以正确计算bname的值,而不是把他当作指针。


Julykey 2010-04-24
  • 打赏
  • 举报
回复
楼主其实你可以这么理解:typedef char* schar; schar bname[]={"ccccc","bbbbb","csssaaa"};
所以bname不是2级指针,sizeof(bname)是算的数组所占用的字节数。
机智的呆呆 2010-04-24
  • 打赏
  • 举报
回复
说一下概念的问题:
首先数组和指针是两种不同的类型,之所以数组名可以赋值给指针,是因为c++规定了Array-to-pointer conversion,c++规定一个含有n个T类型的数组可以转换一个成右值,这个右值被解析成一个指向T类型指针变量的值。
再者c++标准规定了sizeof应用于一个数组时,其结果是数组所占内存的字节数,这就意味是数组的长度n乘以数组中元素的大小。
wade_2003 2010-04-24
  • 打赏
  • 举报
回复
学习了
pengzhixi 2010-04-24
  • 打赏
  • 举报
回复
就你这里来说 这个数组存放的就是指针,不管你这个指针指向什么类型,指针占的字节大小是确定的。那么将数组的大小除以指针的大小就是存放指针的个数了。
pengzhixi 2010-04-24
  • 打赏
  • 举报
回复
而数组占多少字节只和元素个数和元素类型相关。至于元素本身的内容扯不到一起。
pengzhixi 2010-04-24
  • 打赏
  • 举报
回复
bname是指针数组的数组名,应该是一个二级指针吧?sizeof(bname)是什么意思呢?
这个数组名压根就不是2级指针。sizeof(bname)是算的这个数组占用了多少个字节。
wuhuwy 2010-04-24
  • 打赏
  • 举报
回复
Sizeof返回的是数组的大小
yyg990441 2010-04-24
  • 打赏
  • 举报
回复
bname是指针数组的数组名,应该是一个二级指针吧?

错误!bname是个不可改变的左值,它的值(右值)是个二级指针.

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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