字符串常量

来源:互联网 发布:egd网络黄金骗局吗 编辑:程序博客网 时间:2024/04/19 19:34
当一个字符串常量出现在表达式中,它的值是个指针常量。编译器把这些指定

字符的一份拷贝存储于内存的某个位置,并存储一个指向第一个字符的指针。但

是,当数组名用于表达式中时,它们的值也是指针常量。我们可以对它们进行下

标引用、间接访问、指针运算。让我们来看一例:

"xyz"+1;

     对于绝大多数程序员而言,它看上去象垃圾。它好象试图在一个字符串上面执

行某种类型的加法运算。但是当你记得字符串常量实际上是个指针时,它的意义

就变得清楚了。这个表达式计算“指针值加上1”的值。它的结果是个指针,指向

字符串中的第二个字符:y。

    那么我们再来看一例:

"xyz"[2];

     现在你应该能够推断出这个表达式的值就是字符z。

     先来看一神秘函数:(参数是一个0~100之间的值)

#include<stdio.h>

void mystery(int n)

{

      n+=5;

      n/=10;

      printf("%s/n","**********"+10-n);

}

    它根据参数值的一定比例打印相应数量的星号。它比传统的循环方案要容易

的多,效率也高得多。

    再来看一个例子:

/*

**接受一个无符号整型值,把它转换为字符,并打印出来,前导零被去除

*/

#include<stdio.h>

void binary_to_ascii(unsigned int value)

{     unsigned int quotient;

      quotient=value/10;

      if(quotient!=0)

            binary_to_ascii(quotient);

     putchar(value%10+'0');

}

    这个程序是把二进制值转换为字符。因为value%16可能是0~15之间的

任何值,而10~15之间的值应该是以字母A~F来表示。下面的代码是解决

这个问题的一种典型方法。

remainder =value % 16;

if(remainder<10)     putchar(remainder+'0');

else  putchar(remainder-10+'A');

    下面的代码用一种不同的方法解决这个问题:

putchar("0123456789ABCDEF"[value%16]);

    这个方法比传统方法要快,因为它所需要的操作更少。但是,它的代码并

不一定比原来的方法更小。虽然指令减少了,但它付出的代价是多了一个

17个字节的字符串常量。