1. 使用 e1=e2的赋值方式 作为 条件语句内部的判断,请使用显示的判断
不使用:
if( x =y ) foo();
而使用:
if( (x = y) != 0) foo();
2. 注意编码规范,一定要在赋值号 “=”两边,写上空格,以避免如下的 无意识错误。
本来想写成:
a = -1;
但是没有加空格:
a=-1;
这会被编译器翻译成:(这里猜测应该是很老的编译器才有这种解释,现在都是用 “+=”和“-=”运算符)
a = a - 1;
3.进制的表示
int a ; a = 141; /*十进制*/ printf("a:%d " ,a); a = 0215; /*八进制,以数字“0”开头*/ printf("a:%d " ,a); a = 0x8D; /*十六进制*/ printf("a:%d " ,a);
现在 ”0195“ 的表示方法会被编译器报错
a = 0195; /*八进制*/
4.字符与字符串
首先说明的是,对于字符串常量,是存储在常量区,只读数据区 .rodata里面的。
并且,对于同样的字符串,是只存在一个副本的,在查找字符串的时候,会先去只读数据区查找有无对应字符串的存储地址,有的话,直接输出;没有才会创建新的字符串:
char * str = "test string address."; char * str1 = "test string address."; cout<<hex<<(int)( str)<<endl;/*以16进制无符号形式输出*/ cout<<(int )(str1)<< endl; cout<<(int )("test string address.")<< endl;; printf("Ox%x " ,str); /*以16进制无符号形式输出*/ printf("Ox%x " ,str1); printf("Ox%x " ,"test string address.");
分别用C和C++的输出流,输出”test string address.”的地址,发现是一样的。
对于printf()函数来说,内部传入的是字符串的地址,所以要分清楚
字符 ('n' '
'……用单引号,传递的是值,字符等价于一个整数,对应其ASCII码)
和
字符串("n","
"……用双引号,传递的是地址,这个从上面的例子,直接把"test string address." 传给printf()函数可以看出)
的区别
printf(' ' ); /*报错*/ printf(" " );
5. 用字符给int赋值
int a ; a = 'yes' ;
这时候,相当于把 int 变量当作一个 char [4]的数组,'yes'会被高位对高位,低位对低位的填充进a中。
cout <<(char )a<< endl; cout <<(char )(a>>8)<< endl; cout <<(char )(a>>16)<< endl; cout <<(char )(a>>24)<< endl;
如果字符不足4个,那么高位补0;
cout <<(char )a<< endl; cout <<(char )(a>>8)<< endl; cout <<(char )(a>>16)<< endl; cout <<(int )(a>>24)<< endl;
如果字符过多,则会报错。
int a ; a = 'abcde' ;