C语言代码,能不能帮我解读一下这道题,谢谢。 100

 我来答
谷歌地
2017-06-02 · TA获得超过154个赞
知道小有建树答主
回答量:206
采纳率:57%
帮助的人:67.5万
展开全部
我机器上运行的结果是
59 5
5 4
48
4
这个59我无法解释,我只知道str1没有用\0结束,用strlen求长度的时候是错的。但为什么是59我不知道。新增一个变量int bbb,你写在a[3][4]前面和a[3][4]后面,strlen(str1)的值会变
sizeof(str1)求的是数组的字节数,5
strlen(str2)求的是字符串的长度,因为默认有\0,所以可以顺利结束,等于5

sizeof(str2)求的是指针的字节数,32位机器上是4, 64位机器上是8
sizeof(a)求的是字节数,12个元素,乘以4,等于48

fun(a),数组a默认会转换成指针,这个指针指向一个一维数组,但它还是指针,所以字节数等于4
追问
fun(a);这一句
数组a为什么会转化为指针呢?
追答
默认就是转换成指针,丢失最外层数组的长度
--------------------------------
修改:
丢失的好像是内层的长度,我有点分不清,反正就是转换成了指针,丢失了那一层的长度
fun(int a【3】【4】)就等同于void fun(int (*a)[4])
{
printf("%d\n", sizeof(a));
printf("%d\n", sizeof(*a));
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式