C语言,指针问题,为什么输出结果是3,求高手帮忙分析分析,最好详细点说,谢谢!!

#include<stdio.h>#include<stdlib.h>intmain(){constchar*p="ABCDE";constchar**q=&p;*q="... #include<stdio.h>
#include<stdlib.h>
int main()
{
const char *p="ABCDE";
const char **q=&p;
*q="12345";
const char *s=(++p)++;
p="abcde";
printf("%c\n",*++s);
system("pause");
return 0;
}
展开
 我来答
White_MouseYBZ
2012-11-19 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6492万
展开全部
const char **q=&p的意思就是*q=p,那么*q="12345"的实质就是p="12345",现在是p指向1;const char *s=(++p)++是s=p+1的意思,后面那个++给s赋值时不起作用,那就是s指向了2;printf("%c\n",*++s)是要输出s+1的内容(++在s前要先加1),那自然是3了。
更多追问追答
追问
你好,谢谢您的耐心解答!
还有些问题想问下您:
(1)为什么说“const char **q=&p; 推出 *q 和 p 相同”,怎么推出的啊,二级指针学的不怎么好,纠结!
(2)这个程序中反复用到const这个关键字,const在这里起到什么作用,而且const不是定义只读的变量吗?为什么p开始指向“ABCDE”,然后又指向“12345”,最后又指向“abcde”?只读的指针p为什么还可以不断修改??
追答
1.你只要知道定义指针时前面的*和引用指针时前面的*不是一个意思就明白了:const char **q=&p中的两个**说明q是指针的指针,而&p是说把p的地址取出来(就是p的指针啊),中间的=是说把p的地址赋给指针的指针**q。而引用时*q="12345"中的*是取q的内容,q是双层指针,取一层还是指针,而这一层是指向p的指针,取它的内窗帘容不就是p吗?这太绕了,可能你还没有明白,哈哈……
2.const放在类型符char、int等前声明的指针,是说该指针指向的变量是只读的,不能改写,而它自身的指向是可以改变的。要达到你说的目的,const要放在类型符后,如char const *p=&a,那p就不能再指向别处了,可是变量a的值却可以改变。要想都不可改变,那得写两个const,如const char const *p=&b,那p和b就都不可改变了……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
金色潜鸟
2012-11-19 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5611万
展开全部
const char **q=&p; -- *q 和 p 相同。p=ABCDE *q=ABCDE

*q="12345"; -- p=12345

const char *s=(++p)++; s 指向 p[1], 就是"2"

p="abcde"; -- p 变化不影响 s

printf("%c\n",*++s); -- s 先加1个位置再输出,所以指向 p[2], 就是 "3".
更多追问追答
追问
你好,谢谢您的耐心解答!
还有些问题想问下您:
(1)为什么说“const char **q=&p; 推出 *q 和 p 相同”,怎么推出的啊,二级指针学的不怎么好,纠结!
(2)这个程序中反复用到const这个关键字,const在这里起到什么作用,而且const不是定义只读的变量吗?为什么p开始指向“ABCDE”,然后又指向“12345”,最后又指向“abcde”?只读的指针p为什么还可以不断修改??
追答
const 指指针地址const, 它们指向的值 不是不可以变。值可以不断修改。

**q 和 *p 对应, *q 和 p 对应。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式