指针指向字符串
#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";好像就可以了,为什么呢? 展开
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";好像就可以了,为什么呢? 展开
4个回答
展开全部
题主问了两个问题:(1)题上程序哪里不对:编译没错,运行出错,因为char *p="breadfruit";p这个指针指向了静态内存区(可读不可写)里breadfruit字符串的首个字符。*(p1+3)='b';试图写入,所以运行出错。改成char p[]="breadfruit";就可以对字符串进行修改是因为这个字符串是自己定义的本地变量,随便改。主要是因为两种写法的字符串存放位置不同,想改字符串的话都要用第二种写法。
(2)指针输出为什么用p而不是*p:教材上字符串的输入输出一节上讲的很清楚。用“%s”格式符输出字符串时,printf函数中的输出项是字符数组名(也就是字符数组的起始地址,强调地址)。现在指针p指向了字符数组的第一个字符,然后是这样执行的:按P中地址找到其字符数组首个字符,然后逐个输出其中的字符,直到遇到“\0”为止。
(2)指针输出为什么用p而不是*p:教材上字符串的输入输出一节上讲的很清楚。用“%s”格式符输出字符串时,printf函数中的输出项是字符数组名(也就是字符数组的起始地址,强调地址)。现在指针p指向了字符数组的第一个字符,然后是这样执行的:按P中地址找到其字符数组首个字符,然后逐个输出其中的字符,直到遇到“\0”为止。
展开全部
char *p="breadfruit"; 意思是定义一个char*的指针,该指针的值是,静态内存区 “breadfruit”的首地址,这片内存是不可写的!
不知你看明白了没?
你补充的很好 。。。
char p[]="breadfruit";
就是定义一个数组,该数组拥有11个字节的空间,这片空间可以自由读取。
不知你看明白了没?
你补充的很好 。。。
char p[]="breadfruit";
就是定义一个数组,该数组拥有11个字节的空间,这片空间可以自由读取。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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就表示的一个地址。希望可以帮到你
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就表示的一个地址。希望可以帮到你
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询