"高级语言程序设计第6章指针PPT教程:从初识到灵活应用"
44 浏览量
更新于2024-01-30
收藏 2.11MB PPTX 举报
0x0037b000a00
其中,0x表示十六进制数,0037b000a00为变量a的内存地址。
6.1.2指针的定义和基本操作
指针(Pointer)是用来存放地址的变量。
指针变量必须事先声明指明所指向的数据类型。
指针变量的声明形式为:数据类型 *指针变量名;
例如:int *p;
表示声明了一个指向int类型的指针变量p。
指针的基本操作包括:
取地址操作符(&):取出变量的地址。
例如:&a,表示取变量a的地址。
赋值操作符(=):将某个地址赋给一个指针变量。
例如:p = &a,表示将变量a的地址赋给指针变量p。
取指针所指的值操作符(*):获取指针所指向的地址的值。
例如:*p,表示获取指针p所指向的地址的值。
6.2指针和函数
指针和函数的结合使用具有很高的灵活性和效率。
指针可以作为函数的参数传递,可以在函数内部修改指针所指向的地址的值。
函数可以返回指针作为结果。
6.2.1指针作为函数参数
指针作为函数参数时,可以实现对函数外部变量的修改。
例如:
void swap(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
在调用swap函数时,传入的是两个变量的地址,通过指针操作可以实现对变量的交换。
6.2.2指针作为函数返回值
函数可以返回指针作为结果,可以实现函数内部动态分配内存并返回所指向的地址。
例如:
int *allocateArray(int size)
{
int *arr;
arr = (int*)malloc(size * sizeof(int));
return arr;
}
在调用allocateArray函数时,函数内部通过malloc函数分配一片动态内存,并返回该内存的首地址。
6.3指针和数组
指针和数组之间有着密切的关系,指针能够以数组的形式操作和访问数据。
6.3.1指针与数组的关系
数组名可以视为指向数组首元素的指针。
例如:
int arr[5];
int *p;
p = arr;
在上述代码中,p指向了数组arr的首元素。
通过指针可以访问数组的各个元素。
例如:
int arr[5] = {1, 2, 3, 4, 5};
int *p;
p = arr;
for(int i = 0; i < 5; i++)
{
printf("%d ", *(p+i));
}
通过指针p加上偏移量i可以访问数组的各个元素。
6.3.2指针和多维数组
指针和多维数组之间的关系可以通过指针的指针实现。
例如:
int arr[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int **p;
p = (int**)malloc(3 * sizeof(int*));
for(int i = 0; i < 3; i++)
{
p[i] = (int*)malloc(3 * sizeof(int));
}
在上述代码中,通过指针的指针来表示多维数组arr,并动态分配内存。
6.4本章小结
本章介绍了指针的概念、定义和基本操作。
指针和函数的结合使用可以实现对变量的修改和返回动态分配内存的地址。
指针和数组之间有着密切的关系,可以通过指针访问数组的各个元素。
因此,掌握指针的概念和基本操作对于高级语言程序设计是非常重要的。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2021-10-07 上传
zzzzl333
- 粉丝: 783
- 资源: 7万+
最新资源
- 基于Python和Opencv的车牌识别系统实现
- 我的代码小部件库:统计、MySQL操作与树结构功能
- React初学者入门指南:快速构建并部署你的第一个应用
- Oddish:夜潜CSGO皮肤,智能爬虫技术解析
- 利用REST HaProxy实现haproxy.cfg配置的HTTP接口化
- LeetCode用例构造实践:CMake和GoogleTest的应用
- 快速搭建vulhub靶场:简化docker-compose与vulhub-master下载
- 天秤座术语表:glossariolibras项目安装与使用指南
- 从Vercel到Firebase的全栈Amazon克隆项目指南
- ANU PK大楼Studio 1的3D声效和Ambisonic技术体验
- C#实现的鼠标事件功能演示
- 掌握DP-10:LeetCode超级掉蛋与爆破气球
- C与SDL开发的游戏如何编译至WebAssembly平台
- CastorDOC开源应用程序:文档管理功能与Alfresco集成
- LeetCode用例构造与计算机科学基础:数据结构与设计模式
- 通过travis-nightly-builder实现自动化API与Rake任务构建