【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 */
今天的文章字符串常量_c语言入门自学零基础分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/47757.html