今天回顾了一下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无关,他是一个未定义的值。
今天就到这里,有不足的地方还请指正,谢谢大家!