C++指针数组

来源:互联网 发布:嫁给凤凰男 知乎 编辑:程序博客网 时间:2024/05/21 22:21

1.前言

1.1什么是指针数组

如果一个数组的每个元素都是指针变量,这个数组就是指针数组。指针数组的每个元素必须同一类型的指针。声明方式:数据类型 *数组名[下标表达式]

1.2注意

由于指针数组的每一个元素都是一个指针,必须先赋值后引用,因此,声明数组之后,对指针元素赋初值是比不可少的。

2.利用指针数组输出单位阵

#include<iostream>using namespace std;int main(){    int line1[] = { 1, 0, 0 };    int line2[] = { 0, 1, 0 };    int line3[] = { 0, 0, 1 };    //定义整形指针数组并初始化    int *pLine[3] = { line1, line2, line3 };    for (int i = 0; i < 3; i++){        for (int j = 0; j < 3; j++){            cout << pLine[i][j] << " ";        }        cout << endl;    }    return 0;}

这里写图片描述

上例中pLine[i][j]*(pLine[i] + j)是等价,即先把指针数组pLine所存储的第i个指针读出,然后读取它所指向的地址后面的第j个数。

现在把二维数组做对比,二维数组在内存中是以行优先的方式进行存储的,因此,对于二维数组可以将其理解为一维数组的一维数组,数组名是它的首地址,这个数组元素的个数就是行数,每个元素是一个一维数组。

声明一个二维数组,例如:

int array2[2][3]={{11, 12, 12},{21, 22, 23},{31, 32, 33}};

array2[0]是一个长度为3的一维数组,array2[0]表示指向该一维数组首地址的整型指针,这和一维数组的数组名表示指向数组首地址的指针是一个道理。

因此,可以用(array2[0]) 表示 array2[0][0] , 用(array2[0] + 1) 来表示array2[0][1].

3.总结

上面两个例子中,
pLine[i][j] 和 **array2[i][j]的不同之处在于,
pLine[i]的值需要通过读取指针数组pLine的第i个元素才能得到,
而array2[i]的值是通过array2的首地址计算来得到。

0 0
原创粉丝点击