c - printf语句问题

标签 c printf

<分区>

看到了printf的这条语句

printf("Hello printf\n" +6);

当我运行它时,我得到了这个:printf。这是我第一次看到这个版本的 printf 在 "" 之后没有 ,。我应该认为上面的命令如下所示吗?

char *p = "Hello printf";
printf("%s\n", p+6);

最佳答案

这叫做指针运算。它所做的是获取指向字符串文字的指针,并添加六个“单位”(其中一个单位是指向的基础类型的大小,在这种情况下 sizeof(char) (它总是一))。

你可以看到这样的字符串:

 +--+--+--+--+--+--+--+--+--+--+--+--+--+
 | H| e| l| l| o|  | p| r| i| n| t| f|\0|
 +--+--+--+--+--+--+--+--+--+--+--+--+--+
 0  1  2  3  4  5  6  7  8  9 10 11 12 13

下面的数字是字符串中特定字母的偏移量或索引(如果使用数组表示法)。

这里要知道的重要一点是它不增加字节,这里只是巧合,因为基类型是一个字节的大小。如果您有一个 short 数组(通常是两个字节),那么添加六个将添加 6 * sizeof(short) 字节,在正常情况下是 12 个字节。

关于c - printf语句问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21186210/

相关文章:

c - 在 C 中初始化二维字符数组

objective-c - "Reference to ' ' is ambiguous"将纯 C header 包含到 Obj-C iOS 项目时

c - 如何在内核模式下使用 ZwQuerySystemInformation() 获取线程 ID?

c - 为什么在 C 中,像下面代码中提到的警告行会采用下一行的字符串并打印?

c++ - 如何反转真实号码的数字?

复合文字和指针

编写日志写入函数(包装 vfprintf): how to modify the text string to print?

c - 如何打印一个巨大的字符串

C++ 为什么在与 void 指针一起使用时 sprintf_s 格式会发生变化?

assembly - 如何从汇编中打印 float ?