如何写出高质量c代码(四)指针数组和数组指针

首先我们来看一下什么是指针数组,什么又是数组指针
数组指针:那么它是一个指针,且指向一个数组。在32 位系统下任何类型的指针永远是占4 个字节,它是“指向数组的指针”的简称。

int*p)[10];       //这就是一个指向10int类型的数组指针 p

数组指针和二维数组有着不解之缘,因为数组指针又叫“行指针”,如下列代码

//这是一个遍历维数组的操作
int np[5][10];
int *p[10];
p = np;
for(int i = 0;i < 5; ++i)
{
    for(int j = 0;j < 10; ++j)
    {
        .......
    }
    ++p; //重点在这里 p和++p的地址差是10 * 4个字节,因为p这个指针是指向一个有10int元素的数组的
}

这里写图片描述

指针数组:那么它是一个数组,数组中的每个元素都是指针,在32 位系统下任何类型的指针永远是占4 个字节。它是“储存指针的数组”的简称。

int *p[10];         //这就是10个元素为 int *类型的指针数组p

指针数组和二维数组的关系也很微妙,在项目中我们实现多线程之间的环形队列往往会用到,关于环形队列等知识,我会在将来些数据结构和算法的专栏中写到,这里就不做过多陈述了

int *p[10];
int np[10][4];
for(int i = 0; i < 10; ++i)
{
    p[i] = np[i];
}

这里面每个p[i]都是一个指针,都存放着一个指向4个int元素的数组。
如果看代码不直观,那这里来张图就更明了了。这里写图片描述

猜你喜欢

转载自blog.csdn.net/bin_zhang1/article/details/80993723