为了账号安全,请及时绑定邮箱和手机立即绑定

字符数组的指针概念的理解,望讨论。

字符数组的指针概念的理解,望讨论。

HUWWW 2019-04-07 11:18:54
写了如下一段代码,代码理解在其中,望牛人解答理解是否正确。//m声明完后,m存储了m数组第一个字符的地址,但m并不是指针charm[]="abcdef";//才是指针,该指针的地址为m的值char*x=m;//这种方式是将上面两步合二为一,则n就代表了指向数组的第一个未知的指针char*n="abcdef";//数组m的长度printf("%d\n",sizeof(m));//指针x的长度printf("%d\n",sizeof(x));//指针n的长度printf("%d\n",sizeof(n));
查看完整描述

2 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

其实在内存上没什么差别,但编译器知道,m是字符串数组,x是字符指针。
于是在编译sizeof(m)的时候,~~编译器生成指令去根据当前内存管理方式找到申明的数组长度~~编译器生成指令返回数组长度,在编译sizeof(x)的时候,编译器生成指令直接返回指针大小。
中间更正一下,sizeof的值就是在编译时确定的
其实像你例子这样得情况下,编译器根本不用生成指令去找那些长度,因为编译时数组长度已经确定,所以m的长度7就在指令里作为操作数了。一般freemalloc出来的空间才会去找。
总之,,编译器已经看透了一切。。
                            
查看完整回答
反对 回复 2019-04-07
  • 2 回答
  • 0 关注
  • 428 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信