字符串常量
【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小时内删除。
发表评论