永发信息网

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

答案:3  悬赏:20  手机版
解决时间 2021-03-19 18:04
  • 提问者网友:人生佛魔见
  • 2021-03-19 09:28
指针字符串输出时候前面没有* 为什么
最佳答案
  • 五星知识达人网友:人间朝暮
  • 2021-03-19 10:21
char *s="abcd";
printf("%s",s); // 对于"%s",函数要求字符串变量指针,所以用s。

char *p;
int a = 5;
p = &a;
printf("%d",*p); // 对于"%d",函数要求一个int型变量,*p是解除指针,取得int型值。
全部回答
  • 1楼网友:走死在岁月里
  • 2021-03-19 11:19
字符串和字符或者变量是有所不同的
%s是输出一个字符串,以字符串结束符当输出的结束判断
s是指向一个5byte空间,其中有4个字符和一个结束符
打印%s是需要一个地址的,所以s不需要加*
%d打印是需要一个变量,而不是一个地址,所以下面的需要加*来表示一个变量,而不是地址
p是地址,不是你所需要的
你下面的那个*可以不加,但是打印的是p中所存储的内容,而不是p指向的地址中的内容
也就是说不加*打印出来的是p的内容,是一个地址,也就是a的地址
加*,打印的是p指向的内存空间的内容,也就是a地址中的数据,p中存储的内容是a的地址
这么说明白了?
一个变量有两个数据,你知道吧
一个是变量的内容,也就是变量地址中存储的数据
一个是变量的地址,这个是分配的内存空间的流水地址
需要地址还是需要内容,这个看需要追问那么凡是有字符串的时候,如果需要打印字符串就必须用%s格式呗?这个能解释一下吗?是不是指针指向字符串的时候,地址即是字符串?而内容就是具体的字符?这是规定呗?追答看看printf的解释吧
其实跟着规定走即可
字符串打印到屏幕有两个
printf的%s和puts。他是对内存空间中一块数据打印到屏幕上
他们都是对字符串的首地址(数组的中间也可以,只要是个内存的地址即可)进行操作,以字符串的结束符为结束标志(不管是不是超过你申请的数组的长度)
地址不是字符串,只是表示一块内存数据的开始位置,是一个内存空间的位置即可
  • 2楼网友:动情书生
  • 2021-03-19 10:56
printf("%s",s);用s的原因是,%s要求输入一个指针,或数组名(也类似于指针);
如果换成要打印一个字符:printf("%c",*s);这里就需要输入指针指向的字符而不是指针了;
指针的表示用s,指针指向的字符用*s或s[0]。
同理,printf("%d",*p);这是要输出p指向的整型数据;printf("%d",p);则是要输出指针本身的值(也就是a的地址)了。追问太感谢了 非常感谢 谢谢你
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯