字符串常量
【1】字符串常量有哪些特性?
字符串常量之所以称之为常量,因为它可以看作是⼀个没有命名的字符串且为常量。存储于静态数据区。
常量就意味着它具有“只读”属性,不允许被修改。
c语言字符常量有哪些静态数据区,是相对于堆、栈等动态数据区⽽⾔的。
静态数据区存放的是全局变量和静态变量。
全局变量分为常量和⼀般变量。
因为字符串常量不允许进⾏修改,放在静态内存区会提⾼效率。
⽽且其不可改变的性质与静态变量相当类似。更准确表述:存储在常量数据区。
【2】字符串常量与字符常量有何区别?
(1)字符常量由单引号括起来,字符串常量由双引号括起来。
⽰例代码如下:
1char  ch='a';
2char *str="abcedef";
(2)字符常量只能是单个字符,字符串常量则可以含⼀个或多个字符。
(3)可以把⼀个字符常量赋予⼀个字符变量,但不能把⼀个字符串常量赋予⼀个字符变量。在C语⾔中没有相应的字符串变量。⽰例代码如下:
1char  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>
2using namespace std;
3
4void  main()
6char *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///////////////////////
20int anum='a';
21    cout<<anum<<endl;            //97
22
23char ach='a';
24    cout<<ach<<endl;            //a
25//字符数组
26char ch[]="abcdefghijk";
27    cout<<ch<<endl;              //abcdefghijk
28    cout<<ch+2<<endl;            //cdefghijk
29
30char str1[]      = "abc";
31char str2[]      = "abc";
32const char str3[] = "abc";
33const char str4[] = "abc";
34const char* str5  = "abc";
35const char* str6  = "abc";
36char* str7  = "abc";
37char* 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>
2using namespace std;
3void  mystery(int n)
4 {
5    n+=5;
6    n/=10;
7    printf("%s\n","***********"+10-n);
8 }
9void  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 }
24//Out  print
25/*
26*
27**
28***
29****
30*****
31******
32*******
33********
34*********
35**********
36***********
37*/
【4】整型值转换为字符输出如何实现?
⽰例代码如下:
1 #include<stdio.h>
2using namespace std;
3
4void binary_to_ascii(unsigned int value)
5 {
6    unsigned int quotient;
7    quotient = value/10;
8if(quotient!=0)
9        binary_to_ascii(quotient);
10    putchar(value % 10 + '0');
11 }
12
13void main()
14 {
15int a=100;
16    binary_to_ascii(a);  //100
17 }
【5】把⼗进制数据转换为⼗六进制如何实现?
⽰例代码如下:
1/*
2*把⼗进制数转换为⼗六进制
3*/
4
5 #include<stdio.h>
6using namespace std;
7
8void  binary_to_ascii(unsigned int value)
9 {
10    unsigned int  quotient;
11    quotient = value/16;
12if(quotient!=0)
13        binary_to_ascii(quotient);
14    putchar("0123456789ABCDEF"[value % 16]); 15
16 }
17
18void 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/*
30A
3114
321E
3328
3410
3511
3664
37*/

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。