关于c语言字符串指针和一般指针的疑问???

代码如下:1#include<stdio.h>23intmain(intargc,constchar*argv[])4{5inta=10;6int*p=&a;78char... 代码如下:

1 #include <stdio.h>
2
3 int main(int argc, const char *argv[])
4 {
5 int a = 10;
6 int *p = &a;
7
8 char str[] = "hello world!";
9 char *q = str;
10
11 printf(" *p = %d\n", *p); // 间接引用 用的是*p;
12 printf("q = %s\n", q); //为这个地方也是间接引用却是 q 为什么不是*q
13
14 return 0;
15 }
~
展开
 我来答
昧先几者非明哲
2013-11-03 · 超过16用户采纳过TA的回答
知道答主
回答量:37
采纳率:0%
帮助的人:35.4万
展开全部
1 . printf(" *p = %d\n", *p);

p是一个指针,存放的是变量a的地址,*p就是取地址中的内容,也即使a的值10。

2 . printf("q = %s\n", q);

%s表示输出的是一个字符串,此格式控制符要求与之对应的是字符串首地址。
q 中存放的正是字符串的首地址!
大笨象粲
2013-11-03
知道答主
回答量:16
采纳率:0%
帮助的人:6.9万
展开全部
如果你想打破砂锅问到底,最好去查看printf的定义。
p代表一个指针,传递的是地址信息
*p代表一个指针指向的值,传递的是变量信息
printf(" *p = %d\n", *p); 中你想要输出变量a的值,于是你需要给的参数是*p

printf("q = %s\n", q);中你想输出一整个字符串,而字符串是一连串的字符保存在一连串的内存中。

你可以想象,如果系统想输出一整个字符串,它需要知道什么信息?是不是需要知道这个字符串的首地址,然后根据字符串是连续内存来保存的,这样可以找到字符串的所有字符并输出。而你如果只用输出一个数字,参数当然不需要给地址(也就是指针),而需要指针指向的值(变量)就可以了。
至于printf函数怎么把以上实现的,你想明白就去查那个函数的定义吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-11-03
展开全部
str[]是个字符串数组,char *q = str; 即 *q指向的是一个字符串数组,而printf("q = %s\n", q);q=q[0]为首地址*q[0]指引的字符
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式