您的位置:首页 > 编程语言 > C语言/C++

C++菜鸟常见错误整理(第一天)

2013-05-30 18:10 253 查看
今天回顾了一下C++,发现了许多以前概念的不清,还有混淆的知识。在此写下以供大家参考借鉴

本人目前还是学生,能力有限,有不足或者错误的地方欢迎大家指正,谢谢大家!

1、int main() { int x;}这里x的默认值几?

这里x是局部变量,那就是以前残留在堆栈里的随机值。int x; 如果是定义的全局变量或者静态变量,未初始化的话就是0;在类里面,int x的默认值也是0。

2、关于endl

endl是一个特殊值,称为操纵符,将它写入输出流时,具有输出换行的效果,并刷新与设备相关联的缓冲区。

3、extern 声明

extern 声明不是定义,也不分配存储空间。事实上,它只是说明变量定义在程序的其他地方。程序中变量可以声明多次,但只能定义一次。extern int i; 只有当 extern 声明

位于函数外部时,才可以含有初始化式。(extern int i=9; )

4、预防多次包含同一头文件

#ifndef SALESITEM_H

#define SALESITEM_H

………………//代码

#endif

条件指示 #ifndef SALESITEM_H:测试 SALESITEM_H 预处理器变量是否未定义。如果 SALESITEM_H 未定义,那么 #ifndef 测试成功,跟在 #ifndef 后面的所有行都被执

行,直到发现#endif。相反,如果 SALESITEM_H 已定义,那么 #ifndef 指示测试为假,该指示和 #endif 指示间的代码都被忽略。

5、const

const int a = 1;现在a是个常量,不允许被修改,非 const 变量默认为 extern。要使 const 变量能够在其他的文件中访问,必须地指定它为 extern。

6、指针*(p++)+=100;

int a[]={1,2,3,4}; int *p=a; cout<<*p; *(p++)+=100; cout<<*p; cout<<*(p-1); 这里第一个*p输出的是a[0]就是1,*(p++)+=100;应该是*p=*p+100;p++;所以,此时p指向

的是a[1],也就是说,现在a[0]是101,而a[1]还是2。所以函数最后输出1,2,101。



7、关于for循环的i++, 两段代码,略有不同

int main(){ int a,b; for(a=0,b=0;a<2&&!b++;a++) {a++;} cout<<a<<b; return 0;}

int main(){ int a,b; for(a=0,b=0;a<2&&!b++) {a++;} cout<<a<<b; return 0;}

函数一:for循环,先初始化a=0,b=0,然后判断:a=0<2,!b=1,然后b自增为1,然后进入循环体,a自增为1;在执行for循环中的a++,a自增为2,不符合a<2的条件,循环结

束。此时a=2,b=1

函数二:for循环 ,先初始化a=0,b=0,然后判断:a=0<2,!b=1,然后b自增为1,然后进入循环体,a自增为1;继续执行for循环,a<2,!b=0,不符合循环条件,不执行循

环体,但b++还会执行,所以b=2。此时a=1,b=2

8、一段程序,我是没理解,先记下来

int i=1, void main (){int i=i;} i变量从声明那一刻开始就可见了,main()里面的i不是1,因为他和main外面的i无关,他是一个未定义的值。

今天就到这里,有不足的地方还请指正,谢谢大家!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: