编程时,容易因为粗心而引发的错误

1、二维数组初始化问题:
int a[10][10]={0};//正确
a[10][10]={0};//错误,和初始化区别开,需要表达式对其赋值。

2、数组初始化时维数一定要是大于或者等于1的常量表达式:

int a[];   //错误
int b=10;
int c[b];  //错误,必须要是常量
const int sz=get_size();
int d[get_size()];  //错误<pre name="code" class="cpp">int e[sz];      //错误
 
</pre><pre code_snippet_id="1670776" snippet_file_name="blog_20160503_5_5541914" name="code" class="html">3、关于static、extern的一些易错的地方:
   关于static的用法,我的空间里有一篇文章详细阐述了static在C/C++中的用法。
   可以参考了解extern的用法,首先需要了解声明和定义:(C++primer:p45~46)
   定义:用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且仅有一个定义。
   声明:用于向程序表明变量的类型和名字。定义也是申明,应为定义的同时声明了变量的类型和名字,可以用extern声明变量而不定义它。extern说明变量定义在程序的其    他地方,变量可以声明多次,但是只能定义一次。        
   此处引用extern用法:在源文件A里定义的函数,在其它源文件里是看不见的(即不能访问)。为了在源文件B里能调用这个函数,应该在B的头部加上一个外部声明:extern  函数原型这样,在源文件B里也可以调用那个函数了。注意这里的用词区别:在A里是定义,在B里是声明。一个函数只能(也必须)在一个源文件里被定义,但是可以在其     它多个源文件里被声明。定义引起存储分配,是真正产生那个实体。而声明并不引起存储分配。打一个粗俗的比方:在源文件B里声明后,好比在B里开了一扇窗,让它可以    看到A里的那个函数。
</pre><pre code_snippet_id="1670776" snippet_file_name="blog_20160503_11_2291338" name="code" class="html">4、使用数组名作为实参进行函数调用问题void test(int *ia);
int pa[10];
test(pa);       //正确,pa相当于&pa[0]
test(pa[1]);  //错误,pa[0]是int类型
test(pa+4);  //正确,pa+4指向数组第5个元素

5、 同样是初始化的问题,现在是结构体的初始化和对结构体里结构体成员变量的赋值规范

typedef struct  
{
int hour;
int minute;
}DAY;
typedef struct  
{
int year;
int month;
DAY day;
}DATE;

  (1)DATE date;

      date.day = {12,15}; //错误,请和初始化的情况分开

      date.day.hout = 12;//正确赋值

  (2)DATE time = {0,0,{0,0}};  //正确的初始化

养成一开始定义时就进行初始化的习惯。


6、字符数组赋值问题

7、从终端获取一个字符串(带空格)

     使用cin或者scanf这样的函数,是以空格为结束符的,故不能使用

     可以使用标准的C库函数gets()来进行获取,gets()函数使用注意:直至接受到换行符或EOF时停止

8、typedef函数指针使用

char (*pFun)(int);   
    char glFun(int a){ return;}   
void main(){   
    pFun = glFun;   
    (*pFun)(2);   
    } 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值