考虑:
char amessage[] = "now is the time"; char *pmessage = "now is the time"; 我从《 C编程语言》第二版中了解到,以上两个语句没有完成相同的操作。
我一直认为数组是一种处理指针以存储一些数据的便捷方法,但事实并非如此……C语言中数组与指针之间的“非凡”区别是什么? 问题来源于stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
是的,但这是微妙的区别。本质上,前者:
char amessage[] = "now is the time"; 定义一个数组,其成员位于当前作用域的堆栈空间中,而:
char *pmessage = "now is the time"; 定义一个指针,该指针位于当前作用域的堆栈空间中,但在其他位置引用内存(在此指针中,“现在是时间”存储在内存中的其他位置,通常是字符串表)。
另外,请注意,由于属于第二个定义的数据(显式指针)未存储在当前作用域的堆栈空间中,因此未确切指定将在何处存储该数据,并且不应对其进行修改。
编辑:正如Mark,GMan和Pavel所指出的,当在这些变量中的任何一个上使用address-of运算符时,也存在差异。例如,&pmessage返回char **类型的指针,或指向chars的指针,而&amessage返回char(*)[16]类型的指针,或指向16个chars数组的指针(类似于一个char **,如litb指出的,需要被两次取消引用)。