C语言 如何在程序中指针输出



在今天的测验中,我们得到了这个问题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]);
}

那么谁能指导我回答这个问题?

我申请 1st printf 的是实际字符串将被打印StanfordIsGreat

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

对于 3rd printf,ptr + 'l' 给了我StanfordIsGreatl,我不明白 - 'b' 是什么意思

对于第 4 个 printf ptr + 'k' 与上面相同,ptr[3] 代表"a",所以我写了StnfordisGretk

我对 3rd 和 4rd 真的很困惑,有人可以指导我,这样我就可以学习并且不会在将来的测验中犯这样的错误。

char str[] = "StanfordIsGreat";

字符数组(字符串),其中包含内容斯坦福很棒。

char *ptr = str;

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

printf("%s", ptr);

直接打印从指针索引指向字符串末尾的字符串,因此
Output: StanfordIsGreat

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

指针移位 8 索引,指向斯坦福大学中的"I",因此从"I"打印到字符串
末尾 Output: IsGreat

printf("%s", ptr + 'l' - 'b');
如果您知道"l"和"b"的 ASCII 值,

则很容易,在这里您必须减去"l"和"b"的 ASCII 值得到 10,得到等式ptr+10等于指向"G"的指针。
Output: Great

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

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

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

希望你理解:)

最新更新