• 字符串常量


    【1】字符串常量有哪些特性?

    字符串常量之所以称之为常量,因为它可以看作是一个没有命名的字符串且为常量。存储于静态数据区。

    常量就意味着它具有“只读”属性,不允许被修改。

    静态数据区,是相对于堆、栈等动态数据区而言的。

    静态数据区存放的是全局变量和静态变量。

    全局变量分为常量和一般变量。

    因为字符串常量不允许进行修改,放在静态内存区会提高效率。

    而且其不可改变的性质与静态变量相当类似。更准确表述:存储在常量数据区。

    【2】字符串常量与字符常量有何区别?

    (1)字符常量由单引号括起来,字符串常量由双引号括起来。

    示例代码如下:

    1 char  ch='a'; 
    2 char *str="abcedef";

    (2)字符常量只能是单个字符,字符串常量则可以含一个或多个字符。

    (3)可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量。在C语言中没有相应的字符串变量。

    示例代码如下:

    1 char  ch;
    2 ch='s';
    3 ch="s";//error!!

    (4)字符常量占一个字节的内存空间。字符串常量占的内存字节数等于字符串中字节数加1。

    增加的一个字节中存放字符"\0"(ASCII码为0)。这是字符串结束的标志。

    例如:字符串 "C program"在内存中所占的字节为:C program\0。

    字符常量'a'和字符串常量"a"虽然都只有一个字符,但在内存中的情况是不同的。

    'a'在内存中占一个字节,可表示为:a;

    "a"在内存中占二个字节,可表示为:a\0 。

    (5)C语言规定,每一个字符串总是以“\0”作为字符串的结束标志。

     C语言中的字符串用字符数组来表示。

    示例代码如下:

    char str[]="abcdefghijk";

    (6)当一个字符串常量出现在表达式中,它的值实质是个指针常量。

    编译器把这些指定字符的一份拷贝存储于内存的某个位置,并存储一个指向第一个字符的指针。

    而且,当数组名用于表达式中时,它们的值也是指针常量。我们可以对它们进行下标引用、间接访问、指针运算。

    对于绝大多数程序员而言,它看上去象垃圾。它好象试图在一个字符串上面执行某种类型的加法运算。

    但是,当你记得字符串常量实际上是个指针时,它的意义就变得清楚了。这个表达式计算“指针值加上1”的值。

    它的结果是个指针,指向字符串中的第二个字符。

    为了更充分的理解内容。请参照示例代码:

     1 #include<iostream>
     2 using  namespace std;
     3 
     4 void  main()
     5 {
     6     char *s="abcdefgh";
     7     //*s='p';  //编译顺利,运行崩溃..
     8     cout<<"abcde"+1<<endl;    //bcde
     9     cout<<*"abcde"<<endl;     //a
    10     cout<<*("abcde")<<endl;   //a
    11     cout<<s<<endl;               //abcdefgh
    12     cout<<"abcdefgh"+7<<endl;    //h
    13     cout<<"abcdef"[3]<<endl;     //d
    14     cout<<*("abcdef"+4)<<endl;   //e
    15     cout<<*"abcde"+2<<endl;      //99
    16     cout<<"c"<<endl;             //c  
    17     cout<<'c'<<endl;             //c
    18     cout<<(int)'c'<<endl;        //99
    19     ///////////////////////
    20     int anum='a';
    21     cout<<anum<<endl;            //97
    22     
    23     char ach='a';
    24     cout<<ach<<endl;             //a
    25     //字符数组
    26     char ch[]="abcdefghijk";    
    27     cout<<ch<<endl;              //abcdefghijk
    28     cout<<ch+2<<endl;            //cdefghijk
    29     
    30     char str1[]       = "abc";   
    31     char str2[]       = "abc";   
    32     const char str3[] = "abc";   
    33     const char str4[] = "abc";   
    34     const char* str5  = "abc";   
    35     const char* str6  = "abc";   
    36     char* str7  = "abc";  
    37     char* str8  = "abc";  
    38     
    39     cout << ( str1==str2 ) << endl; // 输出0
    40     cout << ( str3==str4 ) << endl; // 输出0
    41     cout << ( str5==str6 ) << endl; // 输出1
    42     cout << ( str7==str8 ) << endl; // 输出1
    43     
    44 }

    【3】神秘函数如何实现?

    利用字符串常量的特性,根据参数值的一定比例打印相应数量的星号。它比传统的循环方案要容易的多,效率也高得多。

    示例代码如下:

     1 #include<stdio.h>
     2 using  namespace std;
     3 void  mystery(int n)
     4 {
     5     n+=5;
     6     n/=10;
     7     printf("%s\n","***********"+10-n);
     8 }
     9 void  main()
    10 {
    11     mystery(1);
    12     mystery(10);
    13     mystery(20);
    14     mystery(30);
    15     mystery(40);
    16     mystery(50);
    17     mystery(60);
    18     mystery(70);
    19     mystery(80);
    20     mystery(90);
    21     mystery(100);
    22 }
    23 
    24 //Out  print
    25 /*
    26 *
    27 **
    28 ***
    29 ****
    30 *****
    31 ******
    32 *******
    33 ********
    34 *********
    35 **********
    36 ***********
    37 */

    【4】整型值转换为字符输出如何实现?

    示例代码如下:

     1 #include<stdio.h>
     2 using  namespace std;
     3 
     4 void binary_to_ascii(unsigned int value)
     5 {     
     6     unsigned int quotient;
     7     quotient = value/10;
     8     if(quotient!=0)
     9         binary_to_ascii(quotient);
    10     putchar(value % 10 + '0');
    11 }
    12 
    13 void main()
    14 {
    15     int a=100;
    16     binary_to_ascii(a);  //100
    17 }

    【5】把十进制数据转换为十六进制如何实现?

    示例代码如下:

     1 /*
     2 *把十进制数转换为十六进制
     3 */
     4 
     5 #include<stdio.h>
     6  using  namespace std;
     7 
     8 void  binary_to_ascii(unsigned int value)
     9 {
    10     unsigned int  quotient;
    11     quotient = value/16;
    12     if(quotient!=0)
    13         binary_to_ascii(quotient);
    14     putchar("0123456789ABCDEF"[value % 16]);
    15 
    16 }
    17 
    18 void main()
    19 {
    20     binary_to_ascii(10);
    21     binary_to_ascii(20);
    22     binary_to_ascii(30);    
    23     binary_to_ascii(40);    
    24     binary_to_ascii(16);
    25     binary_to_ascii(17);
    26     binary_to_ascii(100);
    27 }
    28 //运行结果如下:
    29 /*
    30 A
    31 14
    32 1E
    33 28
    34 10
    35 11
    36 64
    37 */

     

     

    作者:kaizen
    声明:本文版权归作者和博客园共有,欢迎转载。但未经作者同意必须保留此声明,且在文章明显位置给出本文链接,否则保留追究法律责任的权利。
    签名:顺序 选择 循环
  • 相关阅读:
    struts开发步骤
    线程同步及同步变量
    pthread_detach pthread_join pthread_create
    NSThread
    Java线程中run和start方法的区别
    java的守护线程与非守护线程
    多线程的多重属性
    Java Observer 观察者
    Java_观察者模式(Observable和Observer)
    任务、进程和线程
  • 原文地址:https://www.cnblogs.com/Braveliu/p/2840616.html
Copyright © 2020-2023  润新知