我看到了printf的这句话
printf("Hello printf\n" +6);
当我运行它时,我得到了这个:printf
。这是我第一次在,
之后看到没有""
的这个版本的printf。我想上面的命令,如下所示?
char *p = "Hello printf";
printf("%s\n", p+6);
答案 0 :(得分:4)
它被称为指针算术。它的作用是将指针指向字符串文字,并添加六个“单位”(其中一个单位是指向的基础类型的大小,在本例中为sizeof(char)
(总是一个)。) p>
你可以看到这样的字符串:
+--+--+--+--+--+--+--+--+--+--+--+--+--+ | 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个字节。
答案 1 :(得分:3)
是的,你做得对:你在打印之前从字符串的开头递增指针。
顺便说一下,如果你想存储一个像这样的文字字符串的指针,你的char*
应该是const char*
。
答案 2 :(得分:0)
字符串文字"Hello printf"
是一个const字符数组。使用它时,您将获得第一个字符的地址。 +6
是简单的指针算法。
是的,这两行给出了相同的命令。当您使用消除局部变量的优化编译器时,您很有可能获得相同的编译器输出。