【问题标题】:C prog. Pointers and strings [closed]C 程序。指针和字符串 [关闭]
【发布时间】:2016-06-02 18:40:01
【问题描述】:
char str[] = "hello World!!!!!";
char *ptr = str + 6;
printf("%s",ptr);

输出:世界!!!!!!

这里在printf 语句中指定ptr 而不是*ptr,因此为了打印变量的值,我们使用带有指针名称的*(解引用运算符)。比如:

int i=2;
int *ptr;
ptr=&i;
printf("%d",ptr);

打印地址,因为 ptr 在上面的示例中类似地存储地址(&i),因为它应该打印地址而不是 str[] 的值,因为只使用了 ptr 而不是 *ptr,但它没有。为什么?

【问题讨论】:

  • ,but it doesn't why?? ...RTFM...
  • 讽刺,但 VTC 是基于选项的......因为我们不知道语言设计者的观点。
  • “%s” printf 标记查找 (char*)。在第二个中,您将指针打印为 int。如果您使用 -Wall 标志,它应该会给您一个编译器警告。
  • 可能是因为我没有使用 %u 代替 %d,但是 gcc 在第二个示例中显示了正确的输出:6422312 因为它打印了地址
  • 如果你想成为一名优秀的程序员,你应该更多地关注风格。首先是一致性,您不会始终如一地使用空格。其次,像您的第一个示例一样在运算符周围添加空格使代码更易于阅读。此外,出于同样的原因,昏迷后的空格也很好。

标签: c string pointers


【解决方案1】:

在您的第一个示例中,您必须"%s" 修饰符传递一个 char 指针,因此它实际上是必须的,您当然会知道,如果您阅读适当的文档,例如C 标准。

第二个,错了。因为它会调用未定义的行为。要打印变量的地址,您需要使用运算符的& 地址创建指向它的指针,或者直接使用运算符的地址和"%p" printf() 说明符,任何其他说明符都会导致 undefined行为

使用正确的说明符,也适用于您的第一个示例。

【讨论】:

  • ..谢谢哥们..如果我使用 printf("%c",*ptr);它正确打印 W 但为什么在第一个示例中 ptr 没有打印地址,因为我们没有使用 * 和 ptr
  • 感谢现在使用 %p 它正在工作
【解决方案2】:

我们需要将地址传递给 %s。地址必须是从其中打印字符串的字符。它会一直打印到 '\0' 字符,这是字符串的结尾。

在第二个示例中,%d 需要一个数字。我们可以传递一个地址给它,或者地址中的值取决于我们。

【讨论】:

    猜你喜欢
    • 2017-05-03
    • 2012-03-22
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-11
    相关资源
    最近更新 更多