数组指针与指针数组 数组指针: 什么是数组指针:能够指向数组的指针。 定义一个int (*p)[10],首先()的优先级高于[]所以p首先是一个指针,指向的是一个整形的一维数组,所以是数组指针。 数组指针是一个指针不是数组 因为数组指针指向的是数组,数组指针中存放的是数组的地址 数组指针的使用: 二维数组的传参: #include #include void PrintfArr(int (*array)[5],int row,int col) { for(int i = 0; i < row ; i++) { for(int j = 0; j < col; j++) { p 在C语言中,数组指针和指针数组是两种不同的概念,它们虽然都涉及到了指针和数组,但在性质和用途上有所区别。 数组指针,正如其名,是指向数组的指针。当我们声明一个如`int (*p)[10]`的变量时,这里`p`是一个指针,它指向的是一个包含10个整数的一维数组。由于括号的优先级高于方括号,因此`p`首先被看作是一个指针,然后`[10]`表示这个指针所指向的对象是一个长度为10的数组。数组指针常用于处理二维数组,例如在函数参数传递时。在函数`PrintfArr`的例子中,`int (*array)[5]`作为参数,可以用来接收二维数组的每一行的地址,这样就能遍历并打印整个二维数组。当使用`array++`时,实际上是在改变指针,使其指向二维数组的下一行,因此数组指针也被称作行指针。 指针数组则不同,它是一个数组,其每个元素都是一个指针。例如,`int *p[n]`定义了一个包含`n`个整型指针的数组。我们可以将这个数组的元素赋值为变量的地址,例如`p = a`,这里`p`表示的是指针数组的第一个元素,它存储的是变量`a`的地址。指针数组占用的内存空间是`n`个指针大小的总和。 在函数参数传递中,一维数组通常会退化为指向其首元素的指针,所以在函数声明中,`void test(int arr[])`、`void test(int arr[10])`和`void test(int *arr)`实际上是等价的,都表示接收一个整型指针,即一维数组的首地址。 数组名在C语言中被视为指向其首元素的常量指针。这意味着,数组名和`&`运算符作用于数组名的结果在打印时是相同的,它们都表示数组的起始地址。然而,两者在使用时有微妙的不同。`arr`表示数组的首地址,当进行`arr+1`操作时,它增加的是一个元素的大小,对于整型数组来说通常是4个字节;而`&arr`表示整个数组的地址,`&arr+1`增加的是整个数组的大小,即数组所有元素总大小。在处理数组时,理解这一点非常重要,以避免在访问数组时出现越界问题。 数组指针和指针数组是C语言中处理数组的两种工具,它们各自有特定的用途。数组指针主要用来操作和传递二维数组的行,而指针数组则可以用来存储多个变量的地址,形成一种动态的数据结构。理解这两者的差异和用法是掌握C语言高级特性的关键。
- 粉丝: 7
- 资源: 887
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
- 1
- 2
前往页