开发者社区 问答 正文

C:char指针和数组之间的区别

考虑:

char amessage[] = "now is the time"; char *pmessage = "now is the time"; 我从《 C编程语言》第二版中了解到,以上两个语句没有完成相同的操作。

我一直认为数组是一种处理指针以存储一些数据的便捷方法,但事实并非如此……C语言中数组与指针之间的“非凡”区别是什么? 问题来源于stack overflow

展开
收起
保持可爱mmm 2020-02-07 01:01:49 499 分享 版权
1 条回答
写回答
取消 提交回答
  • 是的,但这是微妙的区别。本质上,前者:

    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指出的,需要被两次取消引用)。

    2020-02-07 01:02:01
    赞同 展开评论