Printf声明问题

时间:2014-01-17 12:36:25

标签: c printf

我看到了printf的这句话

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

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

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

3 个答案:

答案 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是简单的指针算法。

是的,这两行给出了相同的命令。当您使用消除局部变量的优化编译器时,您很有可能获得相同的编译器输出。