这个问题大家应该都碰到过,指针数组和数组指针,刚开始看时觉得还是能看懂,但是过些时又搞混了,最后发现还是没有真正理解。
下面就简单说说这两个概念: 一:指针数组,顾名思义,就是说的首先是一个数组吧,然后数组的元素是指针而已
。 说明形式为:type *pointer_array[constant1][constant2]...[constantn]; 例如:int *pai[3]; 由于‘*’是自右向左结合,因此从右向左看,首先看到[4]说明是一个数组,是一个包含4个元素的数组,然后看到‘*’,显然是指针类型,由此可以看出数组中存放的是指针而不是一般的类型。同理,char *pac[2][3]
是包含有6个元素,每一个元素都是一个字符型指针。再来说说他们的初始化: int *pai[3];既然是一个包含4个整形指针的数组那么其对应的将是一个二维整形数组,因为一个整形指针对应一个一维整形数组。 那我就用一个二维整形数组来初始化它,事实上一般也都是这么做的,这里有一个二维数组,int arr[3][2]={{1,2},{3,4},{5,6}},一个三行两列的整形数组,注意这里的行必须和你的指针数组的维数一致,否则是不允许的,不信你可以试试。 这个初始化有很多种选择,以下只列举常见的两中: 第一种也是很好理解的: for(int i=0;i<3;i++) pai[i]=arr[i]; 显然arr[i]是每一行的首地址,相当于一个一维数组的数组名,如是把它送给一个整形指针pai[i]是理所当然的了。
第二种方法: 在说明指针数组时就初始化:int (*ap)[2]={{1,2},{3,4},{5,6}};哈哈这个不用说了吧。
注意:不能将二维数组的数组名赋给指针数组的数组名,pai=arr(错),因为两者的类型不一致,二维数组名的类型是指向int[][]型的指针,而指针数组的的数组名是指向int *[]类型的指针。
在c/c++语言中,指针数组最常用的场合就是说明一个字符串数组。即说明一个数组,它的每个元素都是一个字符串。
二:数组指针:指向一个数组的指针。
说明形式为:type (*pointer_array)[constant1][constant2]...[constantn]; 注意这里的圆括号是必须就将这是由于方括号[],较指针说明符“*”的优先级高,若无此圆括号,编译器将把上述说明解释成成了一个数组指针。 例如:int (*ap)[2];
这样就说明了一个指向包含有2个元素的整形数组的数组指针,听起来确实有点别扭。不过仔细分析应该还是能理解的,就是说ap是一个指针,而它指向的对象是一个指针,注意不要将它和一个指向一个整形变量的指针搞混了。 同样以一个二维数组来说明其初始化问题, int arr[3][2]={{1,2},{3,4},{5,6}};注意这里的列数必须和数组指针所指的数组的列数相同。 第一种方法: ap=arr; 为什么这里能这样将二维数组名送给ap呢,你可以这样理解,二维数组不就可以看成是一维数组的数组吗,而一个数组指针它指向的内容就是一个一维数组
,那么你就可以把这个数组指针当做是一个数组名,只不过这个数组里的元素不是像int,char之类型的,而是一个数组,这样你就可以把它和二维数组的数组名联系在一起了吧。文笔不行,不知道是否说清楚了。
第二种方法: ap=&arr[0]; 这里arr[0]其实就是一维数组的数组名,将它的地址给ap是很自然的,因为ap本来就是指向一个一维数组的。 注意这里不能这样初始化:int (*a)[2]={{1,2},{3,4},{5,6}};大家可以想想为什么。 当然他们也可以动态赋值,由于篇幅就不探讨了。
分享到:
相关推荐
2. **赋值**: 要将一个二维数组赋值给指针数组,必须通过循环逐一为数组中的每个元素赋值。例如,对于 `int *p[3];` 和 `int a[3][4];` 可以通过以下方式赋值: ```c for (int i = 0; i ; i++) { p[i] = a[i]; } `...
"指针进阶之指针数组和数组指针" 指针数组和数组指针是C语言中两个重要的概念,理解它们对指针的使用非常重要。下面将对指针数组和数组指针进行详细的解释和分析。 一、指针数组 指针数组是数组,用于存放指针的...
### 彻底理解指针,指针数组和数组指针,指针函数和函数指针 #### 一、基础知识 在计算机编程中,指针是一个非常重要的概念,尤其是在C/C++这样的语言中更是如此。简单来说,指针是一种变量,但它存储的不是普通的...
在C语言中,指针和数组是两种非常重要的数据结构,它们可以被组合成更复杂的类型,如指针数组和数组指针。这两种概念在处理大量数据或进行内存操作时非常有用。本文将深入探讨指针数组和数组指针的概念,并通过示例...
### C的指针数组和数组指针详解 #### 指针基础概念 在学习“指针数组”和“数组指针”的概念之前,我们首先需要理解什么是“指针”。指针是一种数据类型,用于存储内存地址。在C语言中,指针变量的类型决定了它...
在C++编程中,指针和数组是两种重要的数据结构,而指针数组和数组指针则是它们的组合形式,提供了更加灵活的方式来处理和操作内存中的数据。本文将详细讲解这两种概念及其用法。 首先,指针数组是一个数组,其每个...
指针数组和数组指针的区别
一、指针数组和数组指针的定义 首先,指针数组是一个数组,其中每个元素都是指针,数组占多少个字节由数组本身决定。例如:int *p1[10];这里,p1 是一个指针数组,包含 10 个指向 int 的指针。 而数组指针是一个...
3. 指针数组和数组指针的区别:数组指针是一个指针,它指向一个数组的首地址;而指针数组是一个数组,它的每个元素是独立的指针。 总之,C++中的指针数组是一种强大的工具,能够帮助程序员处理复杂的任务,如动态...
在理解了指针数组和数组指针的概念后,我们可以总结如下: - 指针数组是一组存放指针的数组,其本质是数组。 - 数组指针是一个指针,它指向一个数组,其本质是指针。 在实际编程中,指针数组通常用于存储多个相关...
本文主要探讨了C语言中指针和数组的关系、指针数组和数组指针的区别、指向指针的指针在文本处理程序中的应用等知识点。 首先,指针是一种与地址相关的复合类型,其值是数据存放的位置(地址)。数组则是一系列的...
本文是针对C语言而写的指针数组和数组指针的区别,希望能给予见解
当我们深入探讨指针时,会遇到两个看似相似但实际上有很大区别的概念——指针数组和数组指针。 #### 数组指针的定义 数组指针是一种特殊的指针类型,它指向的是一个数组(通常是一维数组)。这种类型的指针可以...
本文将详细解析指针数组和数组指针的概念,以及它们在访问二维数组时的区别。 首先,我们要明确两个定义: 1. **指针数组**:这种结构是一个数组,其每个元素都是一个指针。例如,`int *parr[5]` 定义了一个包含5...
指针数组和数组指针数组指针、指针数组数组名是地址,与数组首元素地址仅代表自己类型那么大内存不同,数组名内存指向能力非常强。数组名指向整个数组空间。进一步讲,对数组名取地址,即就是在对整个数组取地址,则...
我们可以通过指针数组和数组指针来访问和操作数组中的数据。 二、数组参数 在编程语言中,我们经常需要将数组传递给函数。那么,函数的参数该如何设计呢? 1. 一维数组传参 一维数组可以通过整型数组或指针来...
这展示了函数指针可以如何嵌套和存储,尽管在实际编程中这样的结构可能较少见,但理解这种抽象概念有助于深入理解C++的指针和数组特性。 总之,这个例子展示了C++中函数指针的基本用法,包括如何声明、定义和传递...
在C++编程语言中,指针、...指针数组和数组指针在处理动态数组、链表、树等数据结构时非常有用,而二维数组常常用于处理矩阵和其他二维数据。通过熟练掌握这些技巧,开发者可以更好地编写出高效且易于维护的C++代码。