




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第11章 数组与指针,数组与指针,指针和一维数组 指针和二维数组 动态内存分配函数,数组与指针,一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址。 指针变量既然可以指向变量,当然也可以指向数组元素(把某一元素的地址放到一个指针变量中)。 数组元素的指针就是数组元素的地址。,可以用一个指针变量指向一个数组元素 int a10=1,3,5,7,9,11,13,15,17,19; int *p; p=,等价于p=a;,等价于int *p=a; 或int *p=,注意:数组名a不代表整个数组,只代表数组首元素的地址。 p=a;的作用是“把a数组的首元素的地址
2、赋给指针变量p”,而不是“把数组a各元素的值赋给p”。,指针与一维数组,在引用数组元素时指针的运算,在指针指向数组元素时,允许以下运算: 加一个整数(用+或+=),如p+1 减一个整数(用-或-=),如p-1 自加运算,如p+,+p 自减运算,如p-,-p 两个指针相减,如p1-p2 (只有p1和p2都指向同一数组中的元素时才有意义),如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素,p-1指向同一数组中的上一个元素。 例:float a10, *p=a; 假设a0的地址为2000,则: p的值为2000 p+1的值为2004 p-1的值为1996,越界,如果的初值为,
3、a,a+1,a+2,a0,a0+1,a0+2,a0+3,行指针,列指针,a代表第0行首地址 a+1代表第1行首地址 a+2代表第2行首地址,a,a+1,a+2,a0,a0+1,a0+2,a0+3,行指针,列指针,行指针每加1,走一行,a+i代表行号为i的行首地址(按行变化) *(a+i)代表什么?,a,a+1,a+2,a0,a0+1,a0+2,a0+3,行指针,列指针,相当于ai,a0代表a00的地址 a0+1代表a01的地址 a0+2代表a02的地址 a0+3代表a03的地址,a,a+1,a+2,a0,a0+1,a0+2,a0+3,行指针,列指针,列指针每加1,走一列,a1代表谁的地址? a
4、1+1代表谁的地址? a1+2代表谁的地址? a1+3代表谁的地址?,a,a+1,a+2,a0,a0+1,a0+2,a0+3,行指针,列指针,ai+j代表谁的地址?,a,a+1,a+2,a0,a0+1,a0+2,a0+3,行指针,列指针,代表aij的地址,*(ai+j)代表什么?,代表元素aij,*(*(a+i)+j)代表什么?,与*(ai+j)等价,动态数组,动态存储区,只读存储区,低地址区,高地址区,非静态的局部变量是分配在内存中的动态存储区的,这个存储区是一个称为栈的区域 C语言还允许建立内存动态分配区域,以存放一些临时用的数据,这些数据需要时随时开辟,不需要时随时释放。这些数据是临时存
5、放在一个特别的自由存储区,称为堆区,对内存的动态分配是通过系统提供的库函数来实现的,主要有malloc,calloc,free,realloc这4个函数。 使用这些函数,要在程序开头将头文件包含到源程序中。即在用到这些函数时应当用#include 指令把stdlib.h头文件包含到程序文件中。,函数原型为 :void *malloc(unsigned int size); 作用:是在内存的动态存储区中分配一个长度为size的连续空间,(1) malloc函数,例:malloc(100); 开辟100字节的临时分配域,注意: 指针的基类型为void,即不指向任何类型的数据,只提供一个地址,如果此
6、函数未能成功地执行(例如内存空间不足),则返回空指针(NULL),例:int *p=NULL; p=(int *)malloc(2) 若不清楚相应数据类型所占字节数,则 p=(int *)malloc(sizeof(int),函数原型为 :void *calloc(unsigned n,unsigned size); 作用:是在内存的动态存储区中分配n个长度为size的连续空间,这个空间一般比较大,足以保存一个数组。 用calloc函数可以为一维数组开辟动态存储空间,n为数组元素个数,每个元素长度为size。这就是动态数组。函数返回指向所分配域的起始位置的指针;如果分配不成功,返回NULL。,(2) calloc函数,例:p=calloc(50,4); 开辟504个字节的临时分配域,把起始地址赋给指针变量p,函数原型为 :void *free(void *p); 作用:是释放指针变量所指向的动态空间,使这部分空间能重新被其他变量使用。p应是最近一次调用calloc或malloc函数时得到的函数返回值。,(3) free函数,函数原型为:void *realloc(void *p, unsigned int size); 如果已经通过malloc函数或calloc函数获得了动态空间,想改变其大小,可以用recalloc函数重新分
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 药店日常活动方案
- 构造艺术考试题及答案
- 高中水平考试题及答案
- 幼儿园教学教案设计:病菌快走开卫生习惯情景模拟课
- 妇幼健康考试题及答案
- 物流运输计划模板含成本分析与时间规划
- 企业安全培训计划实施与记录表单安全生产标准规范版
- (正式版)DB15∕T 3666-2024 《灌木发酵饲料生产技术规程》
- (正式版)DB15∕T 3400-2024 《沿黄灌区盐碱地种植耐盐碱植物技术规程》
- (正式版)DB15∕T 3360-2024 《饲草大麦裹包青贮技术规程》
- 2025年征信题库及答案
- 传染病及其预防(第一课时)课件-2025-2026学年人教版生物八年级上册
- 2025年社工工作者考试真题及答案
- 同城理发店转租合同范本
- 2021-2025年高考地理真题知识点分类汇编之地球的运动
- 医院反诈宣传课件
- 2025年日本n4试题及答案
- 2025年秋期人教版3年级上册数学核心素养教案(第2单元)(教学反思有内容+二次备课版)
- 2025乡村医生培训考试试题库及参考答案
- 智慧工业园区AI大模型数字化平台建设方案
- 雨水监测管理办法
评论
0/150
提交评论