c语言取消对null指针的引用_《小白学C》第八章 指针(上)

第八章 指针

§8.1 指针概述

【 概念】

指针:是数据类型的一种, 其内容存储的是另外一个变量的地址。

注意:

地址:设备操作系统中物理内存中的存储单元的编号,编号由操作系统自动分配,无需人为干预。

【指针数据类型】

格式:

                数据类型 *

注意:

指针数据类型所占用的内存字节大小为4B(32位操作系统)/8B(64位操作系统)。

【空指针数据类型/通用指针类型】

格式:

            void *

空指针数据类型允许转换为任意指针数据类型。

§8.2 指针变量

§8.2.1 一维指针

【指针变量声明】

格式:

                数据类型 * 指针变量名;

eg:

              int * iNum;//指针变量

【指针变量运算符】

&: 取地址运算符,返回变量的内存地址

*: 解引用运算符(间接引用运算符),根据指针变量所指向的内存地址,返回内存地址的实际数据内容。

【特性】

* 作为左值:读、写操作

* 作为右值:读操作

【 指针变量初始化】

1、先声明,后初始化(不建议,易造成野指针)

int * p_iNum;int num = 100;p_iNum = #​printf("*p_iNum = %d", * p_iNum);

2、声明的同时进行初始化(建议使用)

1、有具体指向

char ch = 'A';​char * p_ch = &ch;

2、空指针(NULL/0)

char * p_ch = NULL;

注意:

空指针使用NULL/0进行表示, NULL/0是系统集内存地址(0号地址),不允许用户级程序进行访问。

3、用户输入初始化(基本不用)

int iNum = 100;​int * num = &iNum;​printf("Please input an integer: ");​scanf("%d", num);​printf("num = %d", *num);

eg:

#include ​int main(int argc, const char * argv[]) {    int num = 100;        int * iNum;        iNum = #//*iNum = 100        *iNum += 123;//读、写        //int num_2 = *iNum;//读        printf("iNum = %d", *iNum);        printf("num = %d", num);​        return 0;}

§8.2.2 二维指针

【二维指针】:指向指针的指针。

【声明格式】

            数据类型 ** 指针变量名;

eg:

                int ** pp_iNum;

【初始化】

1、声明的同时进行初始化(建议)

int iNum = 100;​int * p_iNum = &iNum;​int ** pp_iNum = &p_iNum;

【解引用操作】

//一维指针​*p_iNum = *(&iNum) = iNum = 100;​​//二维指针​//第一步​*pp_iNum = *(&p_iNum) = p_iNum = &iNum​//第二步​**pp_iNum = **(&p_iNum) = *p_iNum = *(&iNum) = iNum = 100;

eg:

#include ​int main(int argc, const char * argv[]) {    //二维数组        int iNum = 100;         int * p_iNum = &iNum;         int ** pp_iNum = &p_iNum;         printf("iNum = %d*p_iNum = %d**pp_iNum = %d", iNum, *p_iNum, **pp_iNum);         printf("Adress of Memory: iNum = %p*p_iNum = %p**pp_iNum = %p", &iNum, &p_iNum,           &pp_iNum);​    printf("p_iNum真实内存地址:*p_iNum = %p", &p_iNum);​    printf("p_iNum变量指向的内存地址:*p_iNum = %p", p_iNum);        return 0;}

§8.3 未初始化的指针(野指针)

如果定义一个变量没有初始化,它里面的内容是垃圾信息,不可被正常使用。如果一个指针没有被初始化,它存储的是垃圾地址,该指针被称为野指针。

c语言取消对null指针的引用_《小白学C》第八章 指针(上)_第1张图片

§8.4 空指针

当定义一个指针,你还不确定要指向哪个变量时,就把它初始化置为空。

eg:

int *p;​p = NULL; //C语言中,空指针的值可以用NULL和0来表示​或​p = 0;

野指针与空指针的区别:

相同点:

均不能被解引用操作

不同点:

1、野指针是未被初始化的指针,里面的内容是垃圾地址,即指向不确定;

2、空指针是被初始化为NULL的指针,里面的地址是0,即指向空地址,允许指针变量修改自身内存地址 指向,不会造成内存泄漏。

你可能感兴趣的:(c语言取消对null指针的引用)