C语言代码,能不能帮我解读一下这道题,谢谢。 100
1个回答
展开全部
我机器上运行的结果是
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
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));
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询