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);
}