C/C++ char类型的使用

eg0

	char ch1, ch2;
	ch1 = 'a';
	ch2 = "a";
	printf("ch1 = *%c*", ch1);
	printf("ch2 = *%c*", ch2);

编译结果

first.cpp: In function 'int main()':
first.cpp:12:8: error: invalid conversion from 'const char*' to 'char' [-fpermissive]
  ch2 = "a";

编译器说,ch2="a",这条语句是把一个const char*类型的值,赋值给了一个,char类型的变量,不可行。

那我们把ch2声明为char*试试。

	char ch1;
	char *ch2;
	ch1 = 'a';
	ch2 = "a";
	printf("ch1 = *%c*\n", ch1);
	printf("ch2 = *%c*", ch2);

运行结果

first.cpp: In function 'int main()':
first.cpp:19:8: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
  ch2 = "a";
        ^~~
ch1 = *a*
ch2 = **

编译通过了,但是运行时出现了warning。编译器说,C++不支持把一个字符串常量转化成一个char*。

如果把文件后缀由cpp改为c试试。

ch1 = *a*
ch2 = **

正常显示。

 单引号表示char,双引号表示char*

eg1

	char ch = 'a', b, g;
	int i = 1;
	printf("b = *%c*\n", b);
	printf("g = *%c*\n", g);
	printf("ch = *%c*", ch);

运行结果

b = **
g = **
ch = *a*

ch做了初始化,输出a很合理,b和g没有做初始化,什么也没有输出。

把b和g都赋值成‘\0’试试。

	char ch = 'a', b = '\0', g = '\0';
	int i = 1;
	printf("b = *%c*\n", b);
	printf("g = *%c*\n", g);
	printf("ch = *%c*", ch);

运行结果

b = **
g = **
ch = *a*

由此可知,不做初始化操作,编译器会自动为字符型变量赋值为‘\0’。

’\0‘的显示形式不唯一,由不同的编译器而决定,例如同样的代码,在dev c++中运行结果如下。

b = * *
g = * *
ch = *a*

char类型变量如若不做初始化,编译器会自动赋值为'\0'

eg3

代码段

	char ch0 = '65';
	char ch1 = 'a';
	char ch2 = 'abcd';
	char ch3 = 65;
	char ch4 = -1;
	printf("ch0 = *%c*\n", ch0);
	printf("ch1 = *%c*\n", ch1);
	printf("ch2 = *%c*\n", ch2);
	printf("ch3 = *%c*\n", ch3);
	printf("ch4 = *%c*\n", ch4);

运行结果

first.cpp:6:13: warning: multi-character character constant [-Wmultichar]
  char ch0 = '65';
             ^~~~
first.cpp:8:13: warning: multi-character character constant [-Wmultichar]
  char ch2 = 'abcd';
             ^~~~~~
first.cpp: In function 'int main()':
first.cpp:6:13: warning: overflow in conversion from 'int' to 'char' changes value from '13877' to ''5'' [-Woverflow]
  char ch0 = '65';
             ^~~~
first.cpp:8:13: warning: overflow in conversion from 'int' to 'char' changes value from '1633837924' to ''d'' [-Woverflow]
  char ch2 = 'abcd';
             ^~~~~~
ch0 = *5*
ch1 = *a*
ch2 = *d*
ch3 = *A*
ch4 = **

单引号里面字符数量如果超过1个,首先编译器会给出warning,然后实际存储时,会把单引号中最后一个字符赋值给字符型变量。

每一个字符都对应着一个唯一的ascii码,如果赋值号右边是整型且在ascii码的有效范围内,则变量将会被赋值为该整型数值在ascii表中所对应的字符,若超出了合法范围,则会输出一个错误的值(不输出任何值)。

单引号里面带一个字符->整型;双引号里面带字符串->指针。 

你可能感兴趣的:(随笔,c++,c语言,开发语言)