char str[] ="Hello”; sizeof (str ) = ???

codfish 2001-12-25 08:26:40
char str[] = “Hello”;
sizeof (str ) = ???
...全文
1358 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
jwatschool 2001-12-27
  • 打赏
  • 举报
回复
谭浩强那本c语言书明确的讲过, 没有好好看书呀。这是国家二级常考的题
www_com_me 2001-12-26
  • 打赏
  • 举报
回复
我也凑凑热闹!
int main(int argc, char* argv[])
{
char test1[]="12345";
char test2[5];

printf("size of test1=%d\n",sizeof(test1));
printf("size of test2=%d\n",sizeof(test2));
return 0;
}
shitianhen 2001-12-26
  • 打赏
  • 举报
回复
即使有空格,也是6
不过我用的是vc6
可能跟编译器有关系
其他就不知道了
stl_liu 2001-12-26
  • 打赏
  • 举报
回复
这个问题可以看成:
char str[] = "Hello";
char *p = str;
int i = sizeof (str);
int j = sizeof (p);
那么i==6,而j==4。
因为str是字符数组,p是指针。
ourworld 2001-12-26
  • 打赏
  • 举报
回复
leizhengdeng(E-农民) 说得很对,传递指针一般应该再加一个参数指明指针指向地址的空间大小,API中普遍存在这样的用法,在MFC变成中建议使用数组之类的对象,这样不易出错。
winmain 2001-12-26
  • 打赏
  • 举报
回复
6,别忘了'\0'
kingofark 2001-12-26
  • 打赏
  • 举报
回复
学习。
Linux2001 2001-12-26
  • 打赏
  • 举报
回复
呵呵
leizhengdeng 2001-12-26
  • 打赏
  • 举报
回复
具体到函数调用时,不管数组和指针,进入函数後都是以一个4字节(32 bit system)的数压入栈中作为函数内部使用。函数内使用这个4字节的数是不管其是数组还是指针,而是统一作为一个指针来使用。
如果非要在子函数中判断传进来的是指针还是数组,只能根据特定的编译器中堆栈地址的范围来判断,但这时很危险的,所以到数组名作为参数传递到子函数就是仅仅传递一个4字节的值而已。
leizhengdeng 2001-12-26
  • 打赏
  • 举报
回复
函数 int A(char *a);
{
int ret = sizeof(a);
return ret;
}

char str[] =“Hello”;//6
A(str)=???;//4 sizeof(char *) == 4
原因请看:http://www.csdn.net/Expert/topic/441/441581.shtm
somat 2001-12-26
  • 打赏
  • 举报
回复
答案绝对是6!
不要只是空讨论,大家一定要亲自编写程序去试!!!
那样才会体会深刻!!!
ttzzgg_80713 2001-12-26
  • 打赏
  • 举报
回复
6
bear2000 2001-12-26
  • 打赏
  • 举报
回复
答案应该是6.因为每个字符串的末尾都有一个结束符'\0'.这是字符串的标志!
GuanXP 2001-12-26
  • 打赏
  • 举报
回复
sizeof就是对象的内存尺寸.
char str[] = "hello";
在内存中是
str[0] ='h'
str[1] ='e'
str[2] ='l'
str[3] ='l'
str[4] ='0'
str[5] ='\0'
c中的字符串都是用'\0'即0结尾的.


foxmike 2001-12-26
  • 打赏
  • 举报
回复
6
str是字符指针,字符串长度为5,末尾要加一个'\0',故总长度为6
codfish 2001-12-25
  • 打赏
  • 举报
回复
运算符sizeof原本意思???
hz129 2001-12-25
  • 打赏
  • 举报
回复
char str[] = "hello";
sizeof(str) //6
char *p = str;
sizeof(p) //4
sizeof(*p) //1

看来数组和指针真的有很大不同呢,以前学的时候说两者可认为相同实在是差太多了!
codfish 2001-12-25
  • 打赏
  • 举报
回复
函数 int A(char *a);
{
int ret = sizeof(a);
return ret;
}

char str[] =“Hello”;
A(str)=???;
Leehunter 2001-12-25
  • 打赏
  • 举报
回复
别忘了最后还有一个'\0',所以就是6啦.
codfish 2001-12-25
  • 打赏
  • 举报
回复
试题答案是:
char str[] =“Hello”;
sizeof(str) = 6;
可我不知原因?
加载更多回复(4)

69,371

社区成员

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

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