常见错误一: “=” 和“==”混在一起
int main() { int ret; if(ret = 1) { ...... } return 0; }
结果:变量被错误赋值,逻辑判断错误
错误二: 定义较大的全局变量造成 编译文件过大
int a[2000][2000] int a[2000][2000] ={0} int main(){ int main(){ return 0 return 0 } }
节省内存空间,没必要浪费过多的全局栈区
同理 局部变量也需要避免过大定义,造成堆栈溢出现象
如果实在需要定义大数组 建议用malloc定义在堆区 因为堆区空间相比栈区大的多
错误三:返回无效指针
char* func() { char arr[100]; strcpy(arr,"hello"); return arr; }
字符串赋值栈空间 当程序执行后空间释放 所指向的数据不存在 ,继续读写程序会崩掉
错误四:联合体的初始化
typedef union myunion { int x; short y; }UN; UN ux = {4,1};
很遗憾C不支持初始化unuion的任意成员,只能初始化第一个成员。
错误五:在同类文件中声明数组 采用extern int* array
如果定义int array[9];
在其他文件中引用必须 extern int array[];
在数组中 int a[20]; a为指向第一个元素的指针, &a为指向整个数组的指针。