下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、8.1 指针与指针变量的概念,指针与地址运算符 1.在C语言中,指针是指一个变量的地址,通过变量的地址指向的位置找到变量的值,这种指向变量地址可形象地看作指针。用来存放指针的变量称为指针变量,它是一种特殊的变量,它存放的是地址值。 2.定义指针变量的一般形式为: 类型名 *指针变量1,*指针变量2,; 类型名称为基类型它规定了后面的指针变量中存放的数据类型,*号表明后面的指针变量1,指针变量2等是指针变量,*号在定义时不能省略,否则就会变成一般变量的定义了。指针变量1,指针变量2等称为指针变量名。 3.一个指针变量只能指向同一类型的变量。 4.与指针和指针变量有关的两个运算符: (1)*:指针
2、运算符(或称间接访问运算符) (2)&:取地址运算符 通过*号可以引用一个存储单元,如有如下定义: int i=123,*p,k; 则 p=&I;或k=*p;或k=*&I;都将变量i中的值赋给k。 *p=10;或*&i=10;都能把整数10赋给变量i。这里,等号左边的表达式*p和*&i都代表变量i的存储单元。 8.2 变量、数组、字符串、函数、结构体的指针以及指向它们的指针变量 1.变量的指针和指向变量的指针变量。 2.数组的指针和指向数组的指针变量。 所谓数组的指针是指数组的起始地址,数组元素的指针是数组元素的地址。 C语言规定数组名代表数组的首地址,也就是第一个元素的地址。 3.字符串的指
3、针和指向字符串的指针变量。 我们可以通过定义说明一个指针指向一个字符串。 C语言将字符串隐含处理成一维字符数组,但数组的每个元素没有具体的名字,这一点跟字符数组不一样。要引用字符串中的某个字符,只能通过指针来引用:*(s+0),*(s+1),*(s+n)。 4.函数的指针和指向函数的指针变量。 指向函数的指针变量的一般形式为 : 数据类型标识符 (*指针变量名)(); 这里的数据类型标识符是指函数返回值的类型。 函数的调用可以通过函数名调用,也可以通过函数指针调用(即用指向函数的指针变量调用)。 指向函数的指针变量表示定义了一个指向函数的指针变量,它不是固定指向哪一个函数,而只是定义了这样的一
4、个类型变量,它专门用来存放函数的入口地址。在程序中把哪一个函数的地址赋给它,它就指向哪一个函数。在一个程序中,一个指针变量可以先后指向不同的函数。 在给函数指针变量赋值时,只需给出函数名而不必给出参数。因为函数指针赋的值仅是函数的入口地址,而不涉及到实参与形参的结合问题。 对指向函数的指针变量,表达式p+n,p+,p-等都无意义。 5.结构体的指针与指向结构体的指针变量 一个结构体变量的指针就是该变量所占据的内存段的起始地址。可以设一个指针变量,用来指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址。指针变量也可以用来指向结构体数组中的元素。 8.3 用指针做函数参数 函数的参数不仅
5、可以是整型、实型、字符型等数据,还可以是指针类型,它的作用是将一个变量的地址传送到另一个函数中。 8.4 返回指针值的指针函数 一个函数可以返回一个整型值、字符值、实型值等,也可以返回指针型数据 ,即地址这种带回指针值的函数,一般的定义形式为: 类型标识符 *函数名(形参表); 8.5 指针数组、指向指针的指针 1.指针数组指的是一个数组,其元素均为指针类型数据,也就是说,指针数组中的每一个元素都是指针变量。指针数组的定义形式为: 类型标识 *数组名数组长度说明 指针数组可以使字符串处理更加方便。 2.指向指针的指针是指指向指针数据的指针变量,一个指向指针数据的指针变量的一般形式为: 类型标识
6、 * *p; 8.6 main函数的命令参数 指针数组的一个重要应用是作为main函数的形参,一般来说,main函数后的括号中是空的,即没有参数。实际上main可以有参数,如: main(argc,argv) 其中,argc和argv就是main函数的形参。其他函数形参的值可以通过函数调用语句的实参中得到,由于main函数是由系统调用的,因而main函数的形参值不能从程序中得到,但可以在操作系统状态下,将实参和命令一起给出,从而使main函数的形参得到值。命令行的一般形式为: 命令名 参数1 参数2参数n 命令名和各参数之间用空格分隔开。 8.7 动态存储分配 在C语言中有一种称为“动态存储分
7、配”的内存空间分配方式:程序在执行期间需要存储空间时,通过“申请”分配指定的内存空间;当闲置不用时,可随时将其释放,由系统另作它用。本节介绍C语言中动态分配系统的主要函数:malloc()、calloc()、free()及realloc(),使用这些函数时,必须在程序开头包含文件stdlib.h。 1.主内存分配函数malloc() 函数格式:void*malloc(unsigned size); 函数功能:从内存中分配一大小为size字节的块。 参数说明:size为无符号整型,用于指定需要分配的内存空间的字节数。 返回值:新分配内存的地址,如无足够的内存可分配,则返回NULL。 说明:当si
8、ze为0时,返回NULL。 2.主内存分配函数calloc() 函数格式:void*malloc(unsigned n,unsigned size); 函数功能:从内存中分配n个同一类型数据项的连续存储空间,每个数据项的大小为size字节。 参数说明:n为无符号整型,用于指定分配的数据项的个数size为无符号整型,用于指定需要分配的数据项所占内存空间的字节数。 返回值:新分配内存的地址,如无足够的内存可分配,则返回NULL。 3.重新分配内存空间函数realloc() 函数格式:void*realloc(void *block,unsigned size); 函数功能:将block所指内存区的大小改为size字节的块。 参数说明:block为void类型的指针,指向内存中某块,size为无符号整型,用于指定需要分配的内存空间的字节数。 返回值:新分配内存的地址,如无足够的内存可分配,则返回NULL。 4.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五版环保物流绿色包装运输合同规范3篇
- 二零二五版个人房产抵押贷款债权转让合同3篇
- 二零二五版财务会计岗位聘用合同9篇
- 二零二五版智能家居股份制合作合同范本3篇
- 二零二五年度钢结构工程钢筋加工与配送合同范本3篇
- 二零二五版工业4.0工厂生产承包服务合同模板3篇
- 二零二五年房产共有权份额转让产权买卖合同范本含份额调整方案3篇
- 二零二五版个人承包公司物流运输合作合同书6篇
- 二零二五版安徽省劳动合同解除争议调解服务合同2篇
- 二零二五年度能源股权转让居间服务合同范本2篇
- 大型活动联合承办协议
- 工程项目采购与供应链管理研究
- 2024年吉林高考语文试题及答案 (2) - 副本
- 拆除电缆线施工方案
- 搭竹架合同范本
- Neo4j介绍及实现原理
- 焊接材料-DIN-8555-标准
- 工程索赔真实案例范本
- 重症医学科运用PDCA循环降低ICU失禁性皮炎发生率品管圈QCC持续质量改进成果汇报
- 个人股权证明书
- 医院运送工作介绍
评论
0/150
提交评论