1. 定义就是(编译器)创建一个对象,为这个对象分配一块内存并给它
取上一个名字。定义声明最重要的区别:定义创建了对象并为这个对象分配了内存,声明没有分配内存。( C++primer中也说到定义是声明的一种)
2. 数据从内存里拿出来先放到寄存器,然后CPU 再从寄存器里读取数据来处理,处理
完后同样把数据通过寄存器存放到内存里,CPU 不直接和内存打交道。寄存器就就像是太监,CPU是皇上,下面的官员要和皇帝通信要太监作为中间人。
3. register变量可能不存放在内存中, 所以不能用取址运算符 “&”来获取 register变量的地址
4. static变量存在内存的静态区,静态全局变量,作用域仅限于变量被定义的文件中,其他文件即使用 extern声明也没法使用他。
关于extern,extern可以用在不同文件中变量的声明,但其变量在其它文件中必须是全局的,如果变量是在函数内,那它根本是不存在的,因为函数要调用到它才给变量分配空间。函数之间的变量也不适合extern。
5.函数前加 static使得函数成为静态函数。但此处“static”的含义
不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。使用内部函
数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件
中的函数同名。
6. 好的习惯:所有宏定义、枚举常数、只读变量全用大写字母命名,用下划线分割单词。
例如:
const int MAX_LENGTH = 100;
7. sizeof是关键字不是函数。计算变量所占空间大小时,括号可以省略,而计算类型(模子)大小时不能省略。sizeof(int)*p 等于先求sizeof(int) =4 ,然后再4*p;
int i[100]; sizeof(i) =400; sizeof(&i) = 4
8. 为了防止头文件被重复引用,应当用 ifndef/define/endif 结构产生预处
理块. #include <filename.h> 格式来引用标准库的头文件(编译器将从
标准库目录开始搜索) #include “filename.h” 格式来引用非标准库的头文件(编译器将从用户的工作目录开始搜索) 。
9. 建议:在C++ 语法中,类的成员函数可以在声明的同时被定义,并且自动成为内联函数。
这虽然会带来书写上的方便,但却造成了风格不一致,弊大于利。建议将成员函数的定
义与声明分开,不论该函数体有多么小。
10. 不提倡使用全局变量,尽量不要在头文件中出现象 extern int value 这
类声明。数组不能extern。
11. 头文件用来(1)通过头文件来调用库功能;(2)头文件能加强类型安全检查。
一般库都在头文件里面,最好不要放在定义文件中。
头文件中只存放“声明”而不存放“定义
可将头文件保存于 include 目录,将定义文件保存于 source 目录。以便于维护
例子:
#ifndef GRAPHICS_H // 防止 graphics.h 被重复引用
#define GRAPHICS_H
#include <math.h> // 引用标准库的头文件
…
#include “myheader.h” // 引用非标准库的头文件
…
void Function1(…); // 全局函数声明
…
class Box // 类结构声明
{
…
};
#endif
12. 函数在编译时就会把代码存到代码区。内部的变量又分动态创建的和预先分配的。
比如 int i; 这就是预先分配了;int *p = new int; 这就是动太创建的。栈是预先准备好的(函数)程序运行时是会预先分配所需的内存,而堆则要运行到那里才会动态分配。
int *p = new int;
assert(p != NULL); 上面这段代码如果面试时少了分配失败的判断,就危险了
assert在<assert>头文件里。#include <assert>头文件
13.类中的static函数你可以理解为这个类应该有的某种属性,而且只要是这个类的实例就都有这个属性,就算没有实例,这个属性也不会变化,总不能说人类灭绝了腿就没了对吧。
一般的static变量程序运行前就会分配内存空间,而在类中定义的一切变量都没有分配空间,包括static变量。所以要给static分配空间就要在类外main函数前初始化这时才会是真正的定义。一般的“有定义”(例如:int i;)局部变量要在自己的函数调用时才分配空间的。函数调用是就会给自己内部有定义的变量分配空间,如:int I;假如没加int ,会出现出错,就像变量没定义前就使用一样)
以上的笔记是在看一些书后写下来的一些笔记。加了自己一些了解,如有错误,请指出……^_^