简单的C语言问题?

字符指针跟数组一样吗?一开始的首地址是第一个,加一后变成下一位?第一次输出为hello.第二次输出为ello... 字符指针跟数组一样吗?一开始的首地址是第一个,加一后变成下一位?第一次输出为hello.第二次输出为ello 展开
 我来答
自我编程
2020-01-27 · 科技优质答主
自我编程
采纳数:1481 获赞数:4279

向TA提问 私信TA
展开全部
第一次打印pc是字符串hello。
第二次打印*p是字符e。
你的理解不错,指针初始指向首地址,pc的值是字符h的地址,++后就变成e的地址。
但想要打印ello,需要直接打印pc,而不是*pc。
追问
请问字符指针为什么会像数组那样有类似于首地址的东西?
追答
你的说法不对,不是指针有首地址,而是数组有首地址。
数组的首地址就是其第一个元素的地址,比如char a[10];其数组名a和&a[0]都表示首地址。
一个数组在内存中是由多个连续的地址组成的,就像一辆火车,那么我们想找到这个火车,是不是要先找到车头啊。所以才用首地址来定位一个数组。
而字符指针,本质上就是一个变量,只不过它存放的内容是一个字符型地址(刚好可以存放字符串首地址),我们用它指向数组首地址,这样通过指针就可以找到这个数组。
另外,我上面说了数组的地址是连续的,所以指针指向首地址后,如果你对指针++,那么指针就会指向数组第二个元素。
而你打印字符串的时候,你把指针pc作为参数传递过去,这时候打印是从pc指向的地址开始(注意不一定是字符串首地址,除非pc刚好指向首地址)一直打印到字符串末尾的结束符号0。(字符串常量末尾都有一个隐藏的结束符号,如果没有这个结束符号,打印函数就不知道数字符串到哪里结束,会越界。比如你自己定义一个数组char a[3];然后你给其赋值三个字符abc,这样它3个地址都被使用了,没有结束符号,不能作为字符串使用,想做字符串的正确方法是只用前两个地址,最后a[2]赋值0)。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式