指针与数组:理解指针与数组的关系与转换.pdf
指针数组和数组指针 数组指针、指针数组 数组名是地址,与数组首元素地址仅代表自己类型那么大内存不同,数组名内存指向能力非常强。数组名指向整个数组空间。进一步讲,对数组名取地址,即就是在对整个数组取地址,则数组的地址自然要用指向数组的指针才能接收,所以,必须定义指向数组的指针类型,即为数组指针。见代码 #include <stdio.h> int main() { int ar[10] = { 1,2,3,4,5,6,7,8,9,10 }; int *p = ar; /*下面是错误代码 int **p = &ar;*/ //正确写法 int(*pp)[10] = &ar; getchar(); return 0; } int *p = ar; p的类型int *,p指向的类型int int **p = &ar; p的类型int** ,p指向的类型int* int ar[10]的类型,int[10] int(*pp)[10] = &ar;pp的类型是 int (*)[10],pp指向int 在C语言中,指针和数组是两个非常重要的概念,它们之间存在紧密的联系。数组名实际上是一个常量指针,它总是指向数组的第一个元素。理解这种关系对于编写高效的C程序至关重要。 我们来看一下标题中提到的“指针数组”和“数组指针”。指针数组是一个数组,其每个元素都是一个指针,可以存储多个指针值。例如,`int *ptr[10]` 是一个包含10个`int`类型的指针的数组。而数组指针,也称为指向数组的指针,是一个指针变量,它存储的是一个数组的地址,而不是单个元素的地址。比如,`int (*ptr)[10]` 是一个指向包含10个`int`元素的数组的指针。 描述中的代码示例展示了如何正确地处理数组和指针的关系: ```c int ar[10] = { 1,2,3,4,5,6,7,8,9,10 }; int *p = ar; // 正确,p指向数组ar的第一个元素 // int **p = &ar; // 错误,p的类型不匹配,应该是一个指向数组的指针 int (*pp)[10] = &ar; // 正确,pp是一个指向包含10个int的数组的指针 ``` 在这里,`int *p = ar;` 定义了一个`int`类型的指针`p`,它被初始化为数组`ar`的第一个元素的地址。然而,尝试将数组名`ar`赋值给`int **p`是错误的,因为`ar`代表的是整个数组的地址,而不是一个`int`指针的地址。正确的做法是定义一个`int (*)[10]`类型的指针`pp`,并用`&ar`来初始化它,这样`pp`就指向了整个数组`ar`。 在C语言中,数组名和指针之间的转换是自动进行的,这使得可以通过指针访问数组的元素。但是,需要注意的是,虽然数组名可以隐式转换为指向第一个元素的指针,但不能将数组名直接赋值给一个指向指针的指针,因为数组名并不等同于一个简单的指针。 总结来说,指针和数组在C语言中是相互关联的概念,数组名可以被视为指向数组第一个元素的指针,而数组指针则可以用来存储整个数组的地址。正确理解和运用这两个概念可以帮助编写出更加灵活和高效C程序。
- 粉丝: 6757
- 资源: 1678
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- spark实验所需要的资料
- 414.基于SpringBoot的高校心理教育辅导系统(含报告).zip
- 多线程知乎用户爬虫,基于python3
- 412.基于SpringBoot的高校危化试剂仓储系统(含报告).zip
- Logic-2.4.9-windows-x64
- android TV 开发框架: 包含 移动的边框,键盘,标题栏
- 411.基于SpringBoot的高校实习管理系统(含报告).zip
- 410.基于SpringBoot的高校科研信息管理系统(含报告).zip
- 附件1.植物健康状态的影响指标数据.xlsx
- Windows 10 1507-x86 .NET Framework 3.5(包括.NET 2.0和3.0)安装包