指针指向字符串

#include<stdio.h>intmain(){char*p="breadfruit";char*p1;p1=p;*(p1+3)='b';printf("%s\n"... #include <stdio.h>
int main()
{
char *p="breadfruit";
char *p1;
p1=p;
*(p1+3)='b';
printf("%s\n",p);
return 0;
}
这程序什么地方不对?还有指针输出为什么用p而不是*p?
如果把 char *p="breadfruit";改成char p[]="breadfruit";好像就可以了,为什么呢?
展开
 我来答
123456咿呀咿呀哟
推荐于2018-02-27
知道答主
回答量:6
采纳率:100%
帮助的人:4884
展开全部
题主问了两个问题:(1)题上程序哪里不对:编译没错,运行出错,因为char *p="breadfruit";p这个指针指向了静态内存区(可读不可写)里breadfruit字符串的首个字符。*(p1+3)='b';试图写入,所以运行出错。改成char p[]="breadfruit";就可以对字符串进行修改是因为这个字符串是自己定义的本地变量,随便改。主要是因为两种写法的字符串存放位置不同,想改字符串的话都要用第二种写法。
(2)指针输出为什么用p而不是*p:教材上字符串的输入输出一节上讲的很清楚。用“%s”格式符输出字符串时,printf函数中的输出项是字符数组名(也就是字符数组的起始地址,强调地址)。现在指针p指向了字符数组的第一个字符,然后是这样执行的:按P中地址找到其字符数组首个字符,然后逐个输出其中的字符,直到遇到“\0”为止。
mjl86
推荐于2017-10-14 · TA获得超过344个赞
知道小有建树答主
回答量:399
采纳率:0%
帮助的人:395万
展开全部
char *p="breadfruit"; 意思是定义一个char*的指针,该指针的值是,静态内存区 “breadfruit”的首地址,这片内存是不可写的!

不知你看明白了没?

你补充的很好 。。。
char p[]="breadfruit";
就是定义一个数组,该数组拥有11个字节的空间,这片空间可以自由读取。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
飞鱼流汗
2010-07-25 · TA获得超过142个赞
知道小有建树答主
回答量:131
采纳率:0%
帮助的人:101万
展开全部
#include <stdio.h>
int main()
{
char *p="breadfruit";
char *p1;
p1=p;
*(p1+3)='b';
printf("%s\n",p);
return 0;
}
你的程序是对的吧!我运行了一下结果是:brebdfruit就是这个结果啊!你把第四个a换成了b,对的啊? 你说的那个为什么是p而不是*p,那是因为你的格式是%s,是字符串的输出格式,后面是地址。在指针里而p就表示的一个地址。希望可以帮到你
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
乐创客
2020-12-26
知道答主
回答量:34
采纳率:0%
帮助的人:1.8万
展开全部

第五十六集 指针指向字符串

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式