快捷搜索:   服务器  安全  linux 安全  MYSQL  dedecms

完整的学习C++的读书路线图(3)

    指针

    无疑,指针是C中最精髓的部分,因为指针可以在初始化后,可以同时拥有所指变量的两样东西——值和地址。这就给我们写程序时很大的空间,可以直接与内存对话!这也同样引出了千奇百怪的错误,不知道该怎么表达,其实最根本的是要明白我们在使用指针的时候,知道我们使用的究竟是她的哪个性质!是值?还是地址?于此对应的,指针有两种最基本的操作:一个是取地址&,主要用于初始化时的赋值操作。&必须是左值。

    一个是取指向的值*,*可以取任意指向的值,返回其左值。

    对指针的操作犹如打太极一般,有很多招式,但又归于一招。最基础的是分清指针赋值和值赋值:p1=p2;指针赋值,是p1和p2指向同一位置。

    *p1=*p2;值赋值,把p2为地址的内存中的内容赋到p1为地址的内存的。

    注意:指针也是有地址的,它本身也需要在内存中开辟一块存储,这块存储空间里是他所指变量的地址,然后根据这个地址,可以找到所指变量的值!

    指针可以被运算,但要注意的是指针所指向对象的类型,指针都是一样的——4,而他的指向的解析方式是不同的,所以同样的形式会有不同的运算方法,如:p++,对于int型和对于double型所跨越的实际地址是不同的!

    指针和数组

    我们使用指针的时候,其作用和其他变量相似,可以把他的行为与基本类型划等号。但是如果是数组,就不同了,数组声明后保有很多内存单元,每个元素都有一个内存单元,数组名不与某个单独的内存单元相对应,而是和整个内存单元集合相对应,所以这一点和普通变量不同。

    当变量做最普通的声明时,会体现数组和指针最关键的区别:int array「5」;和int * p;内存的分配!这样指针是不分配内存的 ,但是数组分配!

    */

    /*一、文件包含

    #include <头文件名称>

    #include "头文件名称"

    第一种形式 : 用来包含开发环境提供的库头文件,它指示编译预处理器在开发环境设定的搜索路径中查找所需的头文件

    第二种形式 : 用来包含自己编写的头文件,它指示编译预处理器首先在当前工作目录下搜索头文件,如果找不到再到开发环境设定的路径中查找。

    内部包含卫哨和外部包含卫哨

    在头文件里面使用内部包含卫哨,就是使用一种标志宏,可以放心的在同一个编译单元及其包含的头文件中多次包含同一个头文件而不会造成重复包含。如:

    #ifndef _STDDEF_H_INCLUDED_

    #define _STDDEF_H_INCLUDED_

    …… //头文件的内容

    #endif

    当包含一个头文件的时候,如果能够始终如一地使用外部包含卫哨,可以显著地提高编译速度,因为当一个头文件被一个源文件反复包含多次时,可以避免多次查找和打开头文件地操作。如:

    #if !defined(_INCLUDED_STDDEF_H_)

    #include <stddef.h>

    #define _INCLUDED_STDDEF_H_

    #endif

    建议外部包含卫哨和内部包含卫哨使用同一个标志宏,这样可以少定义一个标志宏。如:

    #if !defined_STDDEF_H_INCLUDED_

    #include <stddef.h>

    #endif

    头文件包含的合理顺序

    在头文件中:

    1、包含当前工程中所需的自定义头文件

    2、包含第三方程序库的头文件

    3、包含标准头文件

    在源文件中:

    1、包含该源文件对应的头文件

    2、包含当前工程中所需的自定义头文件

    3、包含第三方程序库的头文件

    4、包含标准头文件

    避免重定义

    如果把一个struct定义放在一个头文件中,就有可能在一个编译程序中多次包含这个头文件。编译器认为重定义是一个错误。如下面的例子:
 // file : type.h
  struct type01
  {
  int a,b,c;
  };

顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论