永发信息网

指针字符串输出时候前面没有* 为什么

答案:3  悬赏:20  手机版
解决时间 2021-03-19 18:04
指针字符串输出时候前面没有* 为什么
最佳答案
char *s="abcd";
printf("%s",s); // 对于"%s",函数要求字符串变量指针,所以用s。

char *p;
int a = 5;
p = &a;
printf("%d",*p); // 对于"%d",函数要求一个int型变量,*p是解除指针,取得int型值。
全部回答
字符串和字符或者变量是有所不同的
%s是输出一个字符串,以字符串结束符当输出的结束判断
s是指向一个5byte空间,其中有4个字符和一个结束符
打印%s是需要一个地址的,所以s不需要加*
%d打印是需要一个变量,而不是一个地址,所以下面的需要加*来表示一个变量,而不是地址
p是地址,不是你所需要的
你下面的那个*可以不加,但是打印的是p中所存储的内容,而不是p指向的地址中的内容
也就是说不加*打印出来的是p的内容,是一个地址,也就是a的地址
加*,打印的是p指向的内存空间的内容,也就是a地址中的数据,p中存储的内容是a的地址
这么说明白了?
一个变量有两个数据,你知道吧
一个是变量的内容,也就是变量地址中存储的数据
一个是变量的地址,这个是分配的内存空间的流水地址
需要地址还是需要内容,这个看需要追问那么凡是有字符串的时候,如果需要打印字符串就必须用%s格式呗?这个能解释一下吗?是不是指针指向字符串的时候,地址即是字符串?而内容就是具体的字符?这是规定呗?追答看看printf的解释吧
其实跟着规定走即可
字符串打印到屏幕有两个
printf的%s和puts。他是对内存空间中一块数据打印到屏幕上
他们都是对字符串的首地址(数组的中间也可以,只要是个内存的地址即可)进行操作,以字符串的结束符为结束标志(不管是不是超过你申请的数组的长度)
地址不是字符串,只是表示一块内存数据的开始位置,是一个内存空间的位置即可
printf("%s",s);用s的原因是,%s要求输入一个指针,或数组名(也类似于指针);
如果换成要打印一个字符:printf("%c",*s);这里就需要输入指针指向的字符而不是指针了;
指针的表示用s,指针指向的字符用*s或s[0]。
同理,printf("%d",*p);这是要输出p指向的整型数据;printf("%d",p);则是要输出指针本身的值(也就是a的地址)了。追问太感谢了 非常感谢 谢谢你
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
金鱼露头是因为饿了还是因为水里缺氧?金鱼饿
江安县人口和计划生育服务中心地址在哪,我要
岁月从容是哪一首歌里的词
中文水谷隼中文怎么读
德国钢琴品牌销量排名
类似魔法科高校的劣等生的精美的动漫
即食海参配料包
关于清明节的传说
翡翠中路在哪里啊,我有事要去这个地方
过年快递不送货了,自动确认收货还有三天,怎
财务管理专业好还是资产评估好?
应试教育主导的国家再大也不会强
为什么国内卡西欧的手表日本没有
农村土地确权,独生子女享受的政策规定
储蓄卡不开通网银和转帐功能,但是绑定的不是
推荐资讯
佳能6D2为什么是入门级
分子热运动的分子间势能取决于物体的体积.
山水的古诗及鉴赏
头发比较多很厚重发质又不好又粗又硬想留短发
宝马730出现数字式发动机电子系统总线是怎么
桥吧的老师能自由选择吗?
我在X宝上买了一颗葡萄树说是金手指,我看不
我想出国留学考研,我学的是交通工程专业,去
为什么梦幻西游下载得了之后安装不得
上班24小时休息48小时是否符合劳动法?
《关键20小时,快速学会任何技能,》作者是谁
有网络驾图显示网络连接超时是怎么回事
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?