【问题标题】:Pointer and String Outputs in CC 中的指针和字符串输出
【发布时间】:2015-03-16 23:19:33
【问题描述】:

我试图理解为什么以下代码会产生 BCD123 123 的输出。

void f(char *p)
{
    *p += 1;
}

int main()
{
    int i;
    char a[] = "ABC" "123";
    char *p = a;

    for (i = 0; i < 3; i++)
        f(p++);

    printf("%s ", a);

    printf("%s ", p);

    return 0;
}

【问题讨论】:

  • 如果你用p += 3;替换了整个循环,那么你能理解为什么它会打印出ABC123 123吗?
  • "ABC" "123""ABC123" 完全相同。
  • 哪一点你不明白?你期待什么?
  • 嗯,输出变成了 BCD,那为什么最后只有 123 而不是另一个 BCD123?
  • 您知道B 的“ASCII”代码比A 的ASCII 代码大一吗?你认为f() 在做什么? *p += 1; 是什么意思?

标签: c arrays string pointers output


【解决方案1】:
void f(char *p)
{
    *p += 1;
}

给传入的字符加 1。'A' + 1 = 'B' 等等。查看 ascii 表 http://www.asciitable.com/

第二部分

   char a[] = "ABC" "123";
// is the same as 
   char a[] = "ABC123";
      for (i = 0; i < 3; i++)
            f(p++); <<<<===== moves p along the string 3 places (once for each loop)

        printf("%s ", a);

        printf("%s ", p);  <<< p now points at 4th char

【讨论】:

  • 好的,我现在明白了,因为 p 指向第 4 个字符,它指向 1,然后字符串打印出 123。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-28
  • 2018-11-05
相关资源
最近更新 更多