C 如何在程序中进行指针输出?

C 如何在程序中进行指针输出?,c,pointers,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

在今天的一次测验中,我们将此作为问题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]);
}
#包括
int main(){
char str[]=“斯坦福德大酒店”;
char*ptr=str;
printf(“%s”,ptr);
printf(“%s”,ptr+8);
printf(“%s”,ptr+'l'-'b');
printf(“%s”,ptr+'k'-ptr[3]);
}
那么有谁能指导我回答这个问题吗

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

printf("%s", ptr + 8);
printf("%s", ptr + 'l' - 'b');
printf("%s", ptr + 'k' - ptr[3]);
对于第二个printf,我认为指针会将8个索引向右移动,生成
IsGreat

printf("%s", ptr + 8);
printf("%s", ptr + 'l' - 'b');
printf("%s", ptr + 'k' - ptr[3]);
对于第三个printf,ptr+'l'给了我
StanfordIsGreatl
,我不明白
-'b'
是什么意思

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

我真的很困惑第三和第四节,有人能指导我吗,这样我就可以学习,不会在以后的测验中犯这样的错误

char str[] = "StanfordIsGreat";
包含StanfordIsGreat内容的字符数组(字符串)

char *ptr = str;
指向字符串第一个字母的字符指针

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

printf("%s", ptr + 8);
printf("%s", ptr + 'l' - 'b');
printf("%s", ptr + 'k' - ptr[3]);
指针被移动了8个索引,在StanfordIsGreat中指向“I”,因此从“I”打印到字符串末尾
Output:IsGreat

printf("%s", ptr + 8);
printf("%s", ptr + 'l' - 'b');
printf("%s", ptr + 'k' - ptr[3]);
如果您知道“l”和“b”的ASCII值,那么很容易,这里您必须减去“l”和“b”的ASCII值,得到10,得到等式
ptr+10
,等于指向“G”的指针
输出:很棒

printf("%s", ptr + 8);
printf("%s", ptr + 'l' - 'b');
printf("%s", ptr + 'k' - ptr[3]);
与上面相同,但用ptr和索引欺骗您,ptr[3]指向“n”,因此现在您必须减去“k”和“n”,给您一个-ve值,由于ptr值,会出现意外行为
输出:不清楚,因为我们没有内存池进行概述

编辑:感谢妇幼保健院清除错误:)

希望你能理解:)

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

char *ptr = str;
指向字符串第一个字母的字符指针

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

printf("%s", ptr + 8);
printf("%s", ptr + 'l' - 'b');
printf("%s", ptr + 'k' - ptr[3]);
指针被移动了8个索引,在StanfordIsGreat中指向“I”,因此从“I”打印到字符串末尾
Output:IsGreat

printf("%s", ptr + 8);
printf("%s", ptr + 'l' - 'b');
printf("%s", ptr + 'k' - ptr[3]);
如果您知道“l”和“b”的ASCII值,那么很容易,这里您必须减去“l”和“b”的ASCII值,得到10,得到等式
ptr+10
,等于指向“G”的指针
输出:很棒

printf("%s", ptr + 8);
printf("%s", ptr + 'l' - 'b');
printf("%s", ptr + 'k' - ptr[3]);
与上面相同,但用ptr和索引欺骗您,ptr[3]指向“n”,因此现在您必须减去“k”和“n”,给您一个-ve值,由于ptr值,会出现意外行为
输出:不清楚,因为我们没有内存池进行概述

编辑:感谢妇幼保健院清除错误:)


希望您理解:)

鉴于C不强制使用ASCII,第三个和第四个
printf()
s可以很容易地索引超出范围。
ptr[3]
'n'
,而不是
'a'
,因此,最后一个
printf
中的结果指针将指向数组之前,因此它将调用未定义的行为。鉴于C不强制使用ASCII,第三个和第四个
printf()
s可以很容易地索引超出范围。
ptr[3]
'n'
,而不是
'a'
,因此,最后一个printf中的结果指针将指向数组之前,因此它将调用未定义的行为。