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;
} 展开
#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;
} 展开
2个回答
展开全部
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就都不可改变了……
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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".
*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 对应。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询