1、错误: double d=2/128; //d将等于0.0;
正确: doubled=2.0/128.0; //d将等于2除以128所得的实数;
2、错误:for(int i=0;i<10;i++) ....
正确:int i;
for(i=0;i<10;i++) ....
注:在C++中允许在for语句中定义变量,但在C语言中是不允许的。
3、错误:char* dir;
scanf("%s",dir);//这样操作的结果为dir=null。
正确:chardir[50];
scanf("%s",dir);//这样操作的结果为dir=输入的字符串。
注:未初始化的指针为null;要用数组来存字符串,而不是指针来存字符串,所以若指针不是指向字符数组的,那么用它来存读入的字符串将会产生错误的结果(编译时不会报错)。
4、意图:将字符串dir="output"链接到一个空字符串上。
错误:char str[50]
strcat(str,dir);//容易产生未知错误(也有可能不发生错误),str应该初始化为空字符串。
正确:charstr[50]={};//将str初始化成空字符串
strcat(str,dir);//相当于把dir复制到了str,即dir作为str的开头,str后面还可以连接其他的字符串
注:要重视初始化的作用;字符串初始化成空用str={};
5、数组a(int a[5];)作为函数f的参数时,看下面几种函数f定义时的情况:
错误: f(int[] a);
错误: f(int[5]a);
正确: f(inta[]); a相当于整型指针,sizeof(a)=8.
正确: f(inta[5]); a相当于整型指针,sizeof(a)=8.
正确: typedef intlosertree[5]; f(losertree a); a相当于整型指针,sizeof(a)=8.对应这种
情况,在f中改变a数组中的元素值,退出函数f后,a数组中的值真的改变了。
6、数组只有在定义时初始化才可以使用{}对其赋值,在定义语句后面另加一条语句对用{}对数组初始化是不对的;用{}对数组初始化时,{}内的值可以是变量,不必都是常量。
错误:int a[5];
a={1,2,3,4,5}; //只有在定义时初始化才可以用{}对数组赋值。
正确:inta[5]={1,2,3,4,5};
正确: int i,j,k,m,n;
int a[5]={i,j,k,m,n}; //{}内可以是变量
7、用二维数组当作参数时,如int a[2][2];
错误:voidtest(int array[][]){} //不能两个维度都不指定
正确:voidtest(int array[][2]){} //可以不指定最高维的维度,但是其余的维度都要制定
错误:void test(int** array){}test(a); //其实a只是二维数组的第一个数的地址,而不是地址的地址,所以会提示类型不匹配。
同理可以推理,假如用多维数组作为参数的时候,函数定义的时候,只有多维数组的最高维可以不指定(也可以指定),其余维必须指定。
8、关于优先级
关系操作符(<、>)的优先级比赋值运算符(=)的优先级高。
int test=1>2;
以上语句的执行结果,test是0(代表1>2错误),而不是1.
9、C语言中在数组定义时不能使用这种形式:
int[10] a;
int[]这种形式只能在写函数的参数中使用。
10、
const char *const * pp
实质上是定义了一个指向字符串的二级指针,蓝色的const 限制一级指针指向的内容不能修改,红色的const限制二级指针指向的内容不能修改。
11、C/C++中,++、--操作符的优先级比解引用操作符*的优先级高。例子如下:
int a[5]={1,5,9,14,43};
int* ap=a;
cout<<*ap;
*ap++;
cout<<"and"<<*ap<<endl;
以上代码片段输出结果是:1and5,即是对指针先进行++操作,在解引用指针的值,而不是对解引用的值进行++操作。
12、关于字符串常量和字符数组 相同内容的字符串常量,在程序中只有一份,即指向它们的不同名称的指针是相等。如下例:
char* str="abc";
char* str1="abc";
if(str==str1)
cout<<true<<endl;
else
cout<<false<<endl;
以上代码片段的输出结果为:1。
而相同内容的不同的字符数组,在程序中有两份存储区域,只不过他们内容相同。如下例:
const char str[]="abc";
const char str1[]="abc";
if(str==str1)
cout<<true<<endl;
else
cout<<false<<endl;
以上代码片段输出结果为:0。