请考虑:
char amessage[] = "now is the time";
char *pmessage = "now is the time";
我从第二版《The C Programming Language》中读到,上述两种说法并不相同.
我一直认为数组是一种方便的方法来操作指针来存储一些数据,但事实显然不是这样...在C语言中,数组和指针之间的"非平凡"区别是什么?
请考虑:
char amessage[] = "now is the time";
char *pmessage = "now is the time";
我从第二版《The C Programming Language》中读到,上述两种说法并不相同.
我一直认为数组是一种方便的方法来操作指针来存储一些数据,但事实显然不是这样...在C语言中,数组和指针之间的"非平凡"区别是什么?
没错,但这是一个微妙的区别.基本上,前者:
char amessage[] = "now is the time";
定义其成员位于当前作用域的堆栈空间中的数组,而:
char *pmessage = "now is the time";
定义一个指针,该指针位于当前作用域的堆栈空间中,但引用其他位置的内存(在本例中,"现在是时间"存储在内存的其他位置,通常是字符串表).
另外,请注意,由于属于第二个定义(显式指针)的数据未存储在当前作用域的堆栈空间中,因此未指定其确切存储位置,不应修改.
编辑:正如Mark、GMan和Pavel所指出的,当运算符的地址用于这些变量中的任何一个时,也会有差异.例如;pmessage返回char**类型的指针,或指向chars的指针,而&;amessage返回一个char(*)[16]类型的指针,或者一个指向一个包含16个字符的数组的指针(与char**一样,需要像litb指出的那样取消引用两次).