导图社区 第8章 善于利用指针
指针变量是专门用来存放变量的地址(即指针)的变量。指针变量的值是地址。定义指针变量定义指针变量的一般形式为: 类型名 * 指针变量名; 一个变量的指针的含义...
文件有不同的类型,在程序设计中,主要用到两种文件: (1) 程序文件。包括源程序文件(后缀为.c)、目标文件(后缀为.obj)、可执行文件(后缀为.exe)等。这种文件的内容是程序代码
第九章:用户自己建立数据类型 “第九章:用户自己建立数据类型 9.1 定义和使用结构体变量 9.1.1 自己建立结构体类型 C语言允许用户自己建立由不同数据类型组成的组合型的数据结构,它称为结构体。
社区模板帮助中心,点此进入>>
论语孔子简单思维导图
《傅雷家书》思维导图
《童年》读书笔记
《茶馆》思维导图
《朝花夕拾》篇目思维导图
《昆虫记》思维导图
《安徒生童话》思维导图
《鲁滨逊漂流记》读书笔记
《这样读书就够了》读书笔记
妈妈必读:一张0-1岁孩子认知发展的精确时间表
第8章 善于利用指针
8.1 指针是什么
数据在内存中的存储方式:根据变量类型,决定在内存中的存储单元大小、方式。 根据变量类型,分配空间长度 地址形象化的称为“指针”:通过它能找到以它为地址的内存单元
数据在内存总的读取方式:根据位置信息、数据类型信息。先通过变量名找到相应的地址,从该存储单元中按照变量类型数据的存储方式读出变量类型的值。 地址包括:位置信息(内存编号)和位置信息指向的数据的类型信息
直接访问:直接按变量名进行的访问 间接访问:将变量i的地址存放在另一个变量中,然后将通过该变量来找到变量I的地址,从而访问i。
可以定义一个存放地址的变量,,称为指针变量/地址变量 指针式一个地址,指针变量是存放地址的变量
8.2指针变量
8.2.1 使用指针变量的例子
“*”:只是表示该变量是指针变量
8.2.2 怎样定义指针变量
定义指针变量一般形式:类型名 *指针变量名; 指针变量基类型是用来指定此指针变量可以指向的变量的类型
一个变量的指针(地址)的含义包括两个方面,一是以存储单元编号表示的纯地址(如编号为2000的字节),一是它指向的存储单元的数据类型(如int,char,float等)
指针变量只能存放地址(指针&a),不要将一个整数赋给一个指针变量(只能p=&a)
8.2.3怎样引用指针变量
有3种情况: (1)给指针变量赋值。p=&a. 变量地址 (2)引用指针变量指向的变量。printf("%d",*p);。 (3)引用指针变量的值。printf("%o",p);以八进制形式输出地址
8.2.4 指针变量作为函数参数
作用:将一个变量的地址传送到另一个函数中
8.3通过指针引用数组
8.3.1 数组元素的指针(地址)
一个指针变量指向一个数组元素,不是所有
8.3.2 在引用数组元素时指针的运算
指针进行运算的条件:1.已经指向数组元素 可以进行的运算:加一个整数、减一个整数、自加运算、自减运算、两个指针相减
(1)(对于元素来说)如果指针变量p已指向数组中的一个元素,则p+1指向同一个数组中的下一个元素,p-1指向同一数组中的上一个元素。 (对于地址来说)p+1代表的地址实际上是p+1意味着使p+1*d,d是一个数组元素所占的字节数。int的指针p+1=p+1*4.
8.3.3 通过指针引用数组元素
下标法,a[i].指针法,*(a+i)或*(p+i)
8.3.4 用数组名做函数参数
归纳分析P240
8.3.5 通过数组引用多维数组
1.多维数组元素的地址 1.a多维数组名,同时也表示起始地址,a+i、&a[i]都表示其实地址 2.*a/&a[i][j]表示确定元素地址。**a表示指向地址得元素的值
2.指向多维数组元素的指针变量
(1)指向数组元素的指针变量
(2)指向由m个元素组成的一维数组的指针变量 int (*p)[m];
(3)用指向数组的指针做函数参数
8.4 通过指针引用字符串
8.4.1 字符串的引用方式
(1)用字符数组存放一个字符串,可以通过数组名和下标引用字符串中一个字符,可以通过数组名和格式声明“%s”输出该字符串
(2)用字符指针变量指向一个字符串常量,通过字符指针变量引用字符串常量
8.4.2字符指针做函数参数
8.4.3 使用字符指针变量和字符数组的比较
8.5 指向函数的指针
8.5.1什么是函数的指针
原理:编译时,函数的源代码——>可执行代码,并分配一段存储空间 存储可执行代码空间有一起始地址,称为函数入口地址。 调用:从函数入口地址开始执行,函数名就是函数的起始地址 函数名就是函数的指针,代表函数起始地址
8.5.2 用函数指针变量调用函数
调用函数的方法
1.通过函数名
2.通过指向函数的指针变量
8.5.3怎样定义和使用指向函数的指针变量
定义形式:类型名 (*指针变量名)(函数参数表列); 类型名:函数返回值的类型 *:优先级低于()
8.5.4 用指向函数的指针做函数参数
8.6 返回指针值的函数
定义形式:类型名 *函数名(参数表列);
8.7.1指针数组和多重指针
8.7.1 什么是指针数组
指针数组中的每一个元素都存放一个地址,相当于一个指针变量
定义一维指针数组的一般形式: 类型名 *数组名[数组长度];
8.7.2 指向指针数据的指针变量
char **p; 其中*p是地址,**p是数据
8.7.3 指针数组做main函数的形参
相当于现在main函数已经是被调用的函数了
8.8 动态内存分配与指向它的指针变量
8.8.1 什么是内存的动态分配
8.8.2怎样建立内存的动态分配
1.用malloc函数开辟动态存储区:void *malloc(unsigned int size);
2.用calloc函数开辟动态存储区:void *calloc(unsigned n,unsigned size);
3.用realloc函数重新分配动态存储区:void *realloc(void *p,unsigned int size);
4.用free函数释放动态存储区:void free(void *p);
8.8.3 void指针类型