问一个关于C语言字符串指针和二级指针的问题。

1.char*string="hellomingri";printf("%s",string);这里我想输出这个字符串,第一为什么要用%s,第二为什么不用间接引用*str... 1.char *string="hello mingri"; printf("%s",string);
这里我想输出这个字符串,第一为什么要用%s,第二为什么不用间接引用*string?string存入的不是第一个字母的地址吗?
2. char **p, char*month[]={"1","2"};
for (i=0;i<2;i++)
{
p=month + i ;
printf("%s\n",*p) 这里为什么不用**p? 同理,*p不就是打出来是 month这个地址了吗?
展开
 我来答
ericsoul
2013-09-12 · TA获得超过720个赞
知道小有建树答主
回答量:759
采纳率:0%
帮助的人:667万
展开全部
呃,本来看有人回答了,就没有抢限时的,结果看还没说清楚就写了一下,刚写完,敲回车的时候,刚好系统更新,弹重启。希望不要答完,你已经选了答案了。
第一个问题是 指针的问题,
string是一个指向字符的指针,它是一个地址,*string 就是取string这个地址指向的内容,因为string是一个指向字符的指针所以他 *string得到的就是一个字符,也就是 字符串的首地址‘h'。
而%s呢,是打印字符串,实际上呢是打印一个字符数组(或者叫做c风格字符串),他打印的是以string为首地址,以'\0'结束的字符数组,就是说如果你的数组最后没有'\0',他就会一直打印内存里面的东西直到遇到内存里面恰好有一个'\0’,当然,某个程序可以访问的内存是有限的。
第2个问题是 二级指针的问题,
p是一个指向指针的指针,或者说指向地址的地址,他指向的是一个执行字符的地址,所以他*p得到的就是一个字符指针。
其实你可以这么看
char *string;
char *(*p); *p 等价于 string,可以用string的地方就可以用*p,
所以 printf("%s",string); 替换一下就变成 printf("%s",*p);了。

欢迎追问。刚就是写这句的时候被重启了,nnd。
百度网友a5eb3e1
2013-09-12 · TA获得超过4448个赞
知道大有可为答主
回答量:3486
采纳率:60%
帮助的人:2660万
展开全部
char *string="hello mingri";

那么 *string 表示的是一个字符 'h',

printf("%c", *string) 将会打印 h
string存入的是第一个字母的地址,也是指向这个字符串的指针,

printf("%s",string); 将打印出这个字符串。

第2题也是同样的道理。
追问
请问这个深究下去,比如为什么打印printf("%d",string) 是地址 %c是首字母 %s是字符串,是不是就要牵扯的printf的源代码了?如果要牵扯到我就自己去钻研了。
追答
printf 的格式符 %s 的规定对应的参数提供的是字符串首字母的地址,也就是指向这个字符串的指针。研究一下printf的源代码也是很有好处的。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式