在今天的测验中,我们得到了这个问题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 清除错误:)
希望你理解:)