微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

给定程序输出的解释是什么

如何解决给定程序输出的解释是什么

char * ptr =“ helloworld”; printf(ptr);

为什么要打印helloworld,因为我没有在printf中使用* ptr,它应该提供类似于我们用于整数指针的值。

根据我的说法,我们应该在printf中使用printf(* ptr)

解决方法

对于任何指针或数组p和索引i,表达式p[i]等于*(p + i)

如果索引i为零,则我们有p[0]等于*(p + 0)。将零加到任何操作都是空操作,因此为*(p)。并且这里不需要括号,这给了我们*p

因此,在您的情况下,*ptrptr[0]相同,后者是字符串中的第一个字符。并且字符串中的第一个字符,类型为char

“字符串”是以空字符结尾的序列字符,要使用它,我们对第一个字符使用 pointer 。这就是普通的ptr(不取消引用)。并且与printf格式的字符串参数匹配,该参数必须是指向以空字符结尾的字符串中第一个字符的 pointer

,

printf期望其第一个参数是指向char的指针:

7.21.6.3 printf函数

简介

1 #include <stdio.h>
int printf(const char * restrict format,...);
C 2011 Online Draft

如此

printf( ptr );

是正确的 1 。但是,打印纯文本字符串的通常做法是执行类似的操作

printf( "%s\n",ptr );

而不是将其作为格式字符串作为传递。或者,您可以使用puts函数:

puts( ptr );

因为不涉及格式化。

ptr中的值是字符串的第一个字符的地址-printf将打印从该地址开始的字符的序列,直到看到字符串终止符 2


  1. 您可以将char *参数传递给需要const char *的函数,但不能相反。您将获得“参数n丢弃const”之类的诊断信息。函数声明中的restrict关键字基本上是优化提示-您现在不必担心这一点。
  2. 如果在格式字符串如%d%f中看到转换说明符,它将采用相应参数的值并将其格式设置为等价的字符序列。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。