- 1、本文档共54页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第02章指针与动态内存分配
-2-
本章内容安排
指针与动态内存分配
函数及参数传递
雇员管理系统版本1(数组)
雇员管理系统版本2(动态内存分配)
-3-
1、指针变量
地址的概念
定义一个变量,程序执行后数据会加载到内存中的某个地方,计算机如何找到这个地方?
地址:内存按字节编号,0、1、2……
存储单元的编号就是该单元的地址,它表明了该存储单元在内存中的位置
系统根据变量的地址而不是任何别的东西寻找某个变量。
变量的地址:变量占用的首个存储单元的地址
-4-
变量的地址
变量的地址
变量a占用的是内存的2000~2003四个单元,变量a的地址为2000。
源代码中写a=5;我们可以理解为将5赋给变量a;而计算机在执行程序时,只是将5送入2000~2003四个存储单元中。
-5-
指针变量
int a=5;
int *pa;
pa=a;
指针变量pa指
向变量a
-6-
2、指针变量的使用要点
引用前一定要初始化
int a=5;
int *pa;
// pa=a; 一定要初始化
*pa=10;
-7-
指针变量的使用要点
数据类型要匹配
指针变量的数据类型,必须与其所指向的变量的数据类型一致。
不可以在不同类型指针变量之间赋值。
指针变量中存储的是一个表示地址的整数值,但不可以将一个整数值直接赋给指针变量。
-8-
指针变量的使用要点
void指针及强制类型转换
int a=7, *pa=a;
double b=2.5,*pb=b;
void *pv;
pv=pa;
cout *(int *)pvendl;
pv=pb;
cout*(double *)pvendl;
任意类型指针都可赋值给void类型
符合原来的类型
-9-
3、指针与一维数组
通过下标访问数组元素
int a[10];
int k;
for(k=0;k10;k++)
{
a[k] = k;
}
程序员负责检查下标是否越界!
-10-
指针与一维数组
通过数组名访问数组元素
int a[10];
int k;
for(k=0;k10;k++)
{
*(a+k) = k;
}
-11-
指针与一维数组
通过指针变量访问数组元素
int a[10];
int k,*p;
p=a;
for(k=0;k10;k++)
{
*(p+k)=k;
}
或p=a[0];
或者p[k]=k;
-12-
指针与一维数组
指针变量和数组名的使用区别
a[k] p[k] *(a+k) *(p+k)
for(k=0;k10;k++)
{
*p++=k;
}
a不能被改变
X
*a++=k;
-13-
4、指向数组的指针
数据类型 (*指针变量名)[常量表达式]
int a[2][3]={……};
int (*p)[3];
p=a;
for(int i=0;i2;i++)
{
for(int j=0;j3;j++)
{
p[i][j] =……
}
}
指向数组的指针常用于指向二维数组
-14-
指向数组的指针
访问数组元素的其它方式
a[i][j] p[i][j]
*(a[i]+j) *(p[i]+j)
*(*(a+i)+j) *(*(p+i)+j)
-15-
5、指针数组
数据类型 *变量名[常量表达式]
int a,b,c,d;
int *p[4]={a,b,c,d};
int aa[2][3];
int (*pa)[3];
pa=aa;
定义含4个元素的指针数组,p只是数组名
pa是指针变量,指向含3个int元素的一维数组
-16-
6、二级指针
指向指针的指针
int a=a;
int *pa=a;
int **ppa=pa;
a=5; *pa=5; **ppa=5;
-17-
二级指针示例
二级指针经常与指针数组配合使用
char **p;
char *name[]={“hello”, “good”,
“world”, “bye”, “”};
p=name;
while(**p!=NULL)
{
cout *p++ endl;
}
运行结果
hello
good
world
bye
判断第一个字符是否为’\0’
-18-
7、动态内存分配
开辟某种类型的单个空间
int *p;
if((p=new int) == NULL)
{
cout“error”endl;
exit(0);
}
*p=5;
……
delete p;
用相同类型的指针接收
malloc返回v
您可能关注的文档
最近下载
- Unit 8 Colours 第2课时 Story time(大单元教学设计)三年级英语下册(译林版三起2025).docx VIP
- 2023年深圳市高级中学新高一入学分班考试数学模拟试卷及答案解析.pdf VIP
- 天然气工业用户安全培训.pptx VIP
- 2023黑龙江哈尔滨“丁香人才周”(秋季) 事业单位引才招聘巴彦县教师招聘26人笔试备考试题及答案解析.docx VIP
- 交通事故民事起诉状[交通事故起诉状民事].docx VIP
- 交通事故民事起诉状怎么写.pdf VIP
- CJJ1-2008城镇道路工程施工与质量验收规范.docx VIP
- 10万立方储灌施工方案样本.doc VIP
- 天津大学金融专硕431历年真题(2013-2022)及答案解析.pdf VIP
- 公园升级改造工程施工组织设计方案.pdf VIP
文档评论(0)