我太笨了!我不懂这个问题!C语言!

john_liqinghan 2013-01-14 03:36:57
#include<stdio.h>
void send(const char scmd[])
{
printf("%d\n",sizeof(scmd));//这里输出是什么?
}
void main(void)
{
char sr[6]={0x06,0x00,0x00,0x06,0x23};
printf("%d\n",sizeof(sr));//这里输出是6
send(sr);
}
...全文
507 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
BrightPi 2013-01-18
  • 打赏
  • 举报
回复
形参的数组名就当指针使用。
AndyZhang 2013-01-17
  • 打赏
  • 举报
回复
数组作为形参就是一指针,建议看看c和指针这本书
阿麦 2013-01-17
  • 打赏
  • 举报
回复
看,有飞碟。 6哦,不是4。感觉楼主说的这个6的UFO的说话。
图灵狗 2013-01-17
  • 打赏
  • 举报
回复
字符串是以'\0'结束的,而你的str[7]没有这个值,所以strlen会一直越界找,直到遇到'\0'才停止,所以你的11其实是一个不可预料的值。
引用 15 楼 liqinghan 的回复:
引用 1 楼 turingo 的回复:数组作为函数参数的话,是以指针的方式传进来的,所以sizeof(scmd)相当于sizeof(char*),在32位系统上一般为4个字节。 嗯,那个你能看看这个为什么输出是11 void send(char *scmd) { printf("%d\n",strlen(scmd)); } void main(void) {……
john_liqinghan 2013-01-17
  • 打赏
  • 举报
回复
引用 1 楼 turingo 的回复:
数组作为函数参数的话,是以指针的方式传进来的,所以sizeof(scmd)相当于sizeof(char*),在32位系统上一般为4个字节。
嗯,那个你能看看这个为什么输出是11 void send(char *scmd) { printf("%d\n",strlen(scmd)); } void main(void) { char str[6]={0x06,0x05,0x05,0x45,0x23,'1'}; char* pstr =str; send(pstr);//输出11,但这里呢? } void main(void) { char str[7]={0x06,0x05,0x05,0x45,0x23,'1'}; char* pstr =str; send(pstr);//输出6,strlen碰到'\0'结束,所以是6 }
疯狂的红豆 2013-01-16
  • 打赏
  • 举报
回复
数组名在作为参数传递的时候会被降级为“指针”的,至于指针那就是和机器相关的了,32位机上是4字节的,64位的是8字节的。
F_M_A 2013-01-16
  • 打赏
  • 举报
回复
当一个数组作为参数传递时,是直接给地址的,具体可以看反汇编,而32位系统,指针是占用4字节的
F_M_A 2013-01-16
  • 打赏
  • 举报
回复
竟然不能编辑帖子..... 上面说的有点错了...
F_M_A 2013-01-16
  • 打赏
  • 举报
回复
对于你的这个程序如果这样写就是对的 printf("%d\n",sizeof(scmd[0])) 对于数组来说,sizeof是不能输出数据大小的,因为它不知道你要输出第几个数组中的哪个元素,因为还有些数组是空的,他只能输出数组的地址大小
lm_whales 2013-01-16
  • 打赏
  • 举报
回复
sizeof(char*)
翅膀又硬了 2013-01-15
  • 打赏
  • 举报
回复
作为函数的参数,数组会“弱化”为指针。记住就行了。。4
PIE 2013-01-15
  • 打赏
  • 举报
回复
引用 1 楼 turingo 的回复:
数组作为函数参数的话,是以指针的方式传进来的,所以sizeof(scmd)相当于sizeof(char*),在32位系统上一般为4个字节。
纯净水o 2013-01-15
  • 打赏
  • 举报
回复
前来学期 顺便拿走每天的10分
DyanWang 2013-01-15
  • 打赏
  • 举报
回复
是指针, 4
赵4老师 2013-01-15
  • 打赏
  • 举报
回复
看gcc里面sizeof的具体实现?!
东大坡居士 2013-01-15
  • 打赏
  • 举报
回复
是4的噢,亲
fortunate1y 2013-01-14
  • 打赏
  • 举报
回复
数组作为形参传递给函数时,只是传递了一份指向该数组指针的copy,即scmd为一个指针,指向char型数组,在32位机器上指针大小为4个字节。
jimette 2013-01-14
  • 打赏
  • 举报
回复
printf("%d\n",sizeof(scmd));//这里输出是什么? 4 ls是对的 有的东西是规则!
图灵狗 2013-01-14
  • 打赏
  • 举报
回复
数组作为函数参数的话,是以指针的方式传进来的,所以sizeof(scmd)相当于sizeof(char*),在32位系统上一般为4个字节。

69,382

社区成员

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

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