⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c++错误.txt

📁 次文档收集列出了平时在编写c++程序时出现的一些编译错误
💻 TXT
📖 第 1 页 / 共 5 页
字号:
int a[5]={1,2,3,4,5};

printf ("%d,%d,%d,%d,%d",a[0],a[1],a[2],a[3],a[4]);

}

17、混淆字符数组与字符指针的区别

例如:

main ()

{

char str[10];

str="ICCAVR";

printf ("%s\n",str);

}

在上例中,编译必定出错。因为str[10]是一个数组,str代表数组名,是一个常量,不能被赋值,可将str改为指针变量,将字符串"ICCAVR"的首地址赋值给指针变量str,然后在Printf函数中输出字符串。如下:

main ()

{

char *str;

str="ICCAVR";

printf ("%s\n",str);

}

如果坚持要使用数组,一种方式为初始化时赋值,另一种只能在程序中一个一个元素进行赋值。分别如下:

main ()

{

char str[10]="ICCAVR";

printf ("%s\n",str);

}


main ()

{

char str[10];

str[0]='I';str[1]='C';str[2]='C';str[3]='A';str[4]='V';

str[5]='R';str[6]='\0';str[7]='\0';str[8]='\0';str[9]='\0';

printf ("%s\n",str);

}

要注意:

char str[10]="ICCAVR";


char str[10];

str="ICCAVR";

是不相同的。

18、在引用指针变量之前没有对它赋值

main ()

{

char *p;

scanf ("%s",p);

/*  用户程序  */

}

没有给指针变量赋值就使用它,由于指针变量p的值不确定,因此有可能误指向有用的存储空间,导致程序运行出错。应当改为:

main ()

{

char *p,str[20];

p=str;

scanf ("%s",p);

/*  用户程序  */

}

19、switch语句的各分支漏写了break语句

例如:

switch (time)

{

case 0 : a=0;

case 1 : a=0;

case 2 : a=2;

defult : a=3;

}

上例中,本意是根据time的值来决定a的值,但是最后程序执行的结果都一样(a=3),因为漏写了break语句,程序将从相应的case开始顺序执行,应改为:

switch (time)

{

case 0 : a=0; break;

case 1 : a=0; break;

case 2 : a=2; break;

defult : a=3;

}

20、混淆了字符和字符串的表示形式

例如:

char sex;

sex="M";

由于sex是字符变量,只能存放一个字符,用单引号括起来的是字符常量,才能赋值给一个字符型变量,而用双引号括起来的是字符串常量,它包括两个字符“M”和“\0”,无法存放到字符变量中。应改为:

char sex;

sex='M'

21、使用自加(++)和自减(--)时出错

例如:

main ()

{

int *p,a[5]={0,1,2,3,4};

p=a

printf ("%d",*p++);

}

在上例中,“*p++”本意是指p加1,即指向第1个元素a[1]外,然后输出第一个元素a[1]的值1。但实际上是先执行p++,先使用p的原值,使用后再加1,因此实际执行结果是输出a[0]的值。应改为如下:

main ()

{

int *p,a[5]={0,1,2,3,4};

p=a;

printf ("%d",*(++p));

}

说明:要注意区别p++、*p++、*(++p)和(*p)++的区别,详见“2.7.4 数组的指针和指向数组的指针变量”一节的介绍。

22、所调用的函数在调用语句之后定义,但在调用之前没有说明

例如:

main ()

{

float x=2.0,y=6.0,z;

z=max(x,y);

printf ("%f",z);

}

float max (float x,float y)

{

return (z=x>y ? x:y)

}

在上例的程序中,max函数在main函数之后定义,在调用之前又没有说明,因此出错。应在调用前对函数进行说明:

main ()

{

float max (float x,float y);

float x=2.0,y=6.0,z;

z=max(x,y);

printf ("%f",z);

}

float max (float x,float y)

{

return (x>y ? x:y);

}

也可以将函数max在函数main之前定义。

23、误认为形参值的改变会影响实参的值

例如:

main ()

{

int x=3,y=4;

swap(x,y);

printf ("%d,%d",x,y);

}

int swap (int x,int y)

{

int z;

z=x;x=y;y=z;

}

在上例中,设计者的意图本想是利用swap函数交换x和y的值,但是由于实参和形参之间单向传递,在函数swap中改变了x和y值,main中的x和y是不会改变的。可以改为使用指针的形式,如下:

main ()

{

int x=3,y=4;

int *p1,*p2;

p1=&x ; p2=&y;

swap(p1,p2);

printf ("%d,%d",x,y);

}

int swap (int *p1,int *p2)

{

int z;

z=*p1;*p1=*p2;*p2=z;

}

说明:虽然函数swap在调用函数之后定义,而且在函数main调用之前又没有说明,但是由于swap返回值为整型,C语言规则返回值为整形的函数在调用之前可以不必说明,因此本例中是符合C语法规定的。

24、函数的实参和形参类型不致。

还是使用上例:

main ()

{

int x=3,y=4;

int *p1,*p2;

p1=&x ; p2=&y;

swap(p1,p2);

printf ("%d,%d",x,y);

}

int swap (int p1,int p2)

{

int z;

z=p1;p1=p2;p2=z;

}

C要求实参与形参的类型一致,一个为指向整型变量的指针,另一个为整型变量,类型不同,因此编译出错。

25、不同类型的指针混用

例如:

main ()

{

char x=3,*p1;

int *p2;

p1=&x;

p2=p1;

printf ("%d,%d",x,y);

}

在上例中,设计者本意是想将指针p1所指的值赋p2,但是由于p1与p2所指向的类型不同,不能赋值。在赋值时必须进行强制类型转换。如:

main ()

{

char x=3,*p1;

int *p2;

p1=&x;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -