如何在程序中指针输出?

时间:2016-02-23 16:19:57

标签: c pointers

今天在测验中,我们将此作为我们的问题2。

看到这一点后,我们大多数人都认为我们会失败得很厉害。

#include <stdio.h>

int main ( ) {
  char str[] = "StanfordIsGreat";

  char *ptr = str;

  printf("%s", ptr);
  printf("%s", ptr + 8);
  printf("%s", ptr + 'l' - 'b');
  printf("%s", ptr + 'k' - ptr[3]);
}

那么有人可以指导我回答这个问题吗?

我申请的第一个printf是实际字符串将被打印StanfordIsGreat

对于第二个printf,我认为指针会将8个索引向右移动IsGreat

for 3rd printf,ptr +&#39; l&#39;给了我StanfordIsGreatl,我不明白 - 'b' 的含义

for 4rth printf ptr +&#39; k&#39;与上面相同,ptr [3]代表&#39; a&#39;所以我写了StnfordisGretk

我真的很困惑第3和第4,有人可以指导我,所以我可以学习,不会犯这样的错误,为将来的quizes。

1 个答案:

答案 0 :(得分:3)

char str[] = "StanfordIsGreat";

包含内容StanfordIsGreat的字符数组(字符串)。

char *ptr = str;

指向字符串第一个字母的字符指针(S)。

printf("%s", ptr);

直接打印从指针索引指向的字符串,直到字符串的结尾为止 Output: StanfordIsGreat

printf("%s", ptr + 8);

指针移动8指数,指向&#39;我&#39;因此,在StanfordIsGreat中打印出来的是“我”。到字符串结尾
Output: IsGreat

printf("%s", ptr + 'l' - 'b');

如果您知道&#39; l&#39;的ASCII值,则很容易和&#39; b&#39;,在这里你必须减去&#39; l&#39;的ASCII值。和&#39; b&#39;给你10,给你方程ptr+10等于指针指向&#39; G&#39;。
Output: Great

printf("%s", ptr + 'k' - ptr[3]);

与上述相同但是用ptr欺骗你,ptr [3]指向&#39; n&#39;因此,现在你必须减去&#39; k&#39;并且&#39; n&#39;给你一个-ve值,由于ptr值,意外的行为会上升。
Output: Not Clear Since we don't have a memory pool to overview

编辑:感谢 mch 清除错误:)

希望你明白:)