当一个字符串出现在表达式中时,它的值是个指针常量。编译器把这些指定字符的一份拷贝存储在内存的某个位置(一般是只读数据段),并存储一个指向第一个字符的指针。

“xyz”+1

这个表达式相当于指针加1。它的结果是个指针,指向字符串的中的第二个字符:y

*“xyz”

对一个指针执行间接访问操作时,其结果就是指针所指向的内容。所以它的结果是第一个字符:x

字符串常量用法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#include <stdio.h>

void mystery(int n)
{
        printf("%s\n", "**********" + (10-(n%10)));
}
int main()
{
        mystery(1);
        mystery(2);
        mystery(3);
        mystery(4);
        return 0;
}

输出结果

1
2
3
4
*
**
***
****
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#include <stdio.h>

void binary_to_ascii(unsigned int value)
{
        unsigned int quotient;

        quotient = value/16;
        if (0 != quotient)
                binary_to_ascii(quotient);
        putchar("0123456789ABCDEF"[value%16]);
}
int main()
{
        binary_to_ascii(1000UL);
        printf("\n");
}

运行结果

1
3E8