今天在测验中,我们将此作为我们的问题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。
答案 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 清除错误:)
希望你明白:)