指针数组和数组指针

对于指针数组和数组指针只看中文名的情况下,我们去记忆理解是比较困难的。但是看英文可能会让人豁然开朗。

  • 指针数组:array of pointers,即 “指针的数组”,一个存储指针的数组
  • 数组指针:a pointer to an array,即“数组的指针”,一个指向数组的指针

如果这么去理解记忆就太明确了。 下文中我将一直加上“的”表示领属关系。

下面看看他们的用法:

指针的数组:

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    int *a[3];  // 声明一个指针的数组
    int b[] = {1,2,3};
    // 对指针的数组中的数据依次初始化
    for (int i = 0; i < 3; i++)
    {
        a[i]=&b[i];
    }

    // 打印数据,输出指针的地址、指针指向的地址、指针指向的的值
    for (int i = 0; i < 3; i++)
    {
        // 注意:*a[i] 和 *(a[i])是一样的,因为[]优先级高于*
        qDebug() << &a[i] << " : " << a[i] << " : " << *a[i];
    }

    return app.exec();
}

运行结果:

0x7df530  :  0x7df560  :  1
0x7df538  :  0x7df564  :  2
0x7df540  :  0x7df568  :  3

这个运行结果是在64位机器上运行的指针大小为8字。如果是32位机器指针的大小为4字。

数组的指针:

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    int (*a)[3]; // 声明一个数组的指针
    int b[] = {1, 2, 3};
    a=&b;
    // 给指针指向的数据的第3个元素赋值
    (*a)[2] = 4;
    // 打印数据,输出:指针地址,指针指向的数据的数据
    for (int i = 0; i < 3; i++)
    {
        qDebug() << &a << " : " << (*a)[i];
    }

    return app.exec();
}

结果:

0x3efc90  :  1
0x3efc90  :  2
0x3efc90  :  4
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、指针数组和数组指针的内存布局 指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。...
    芯跳不止阅读 3,456评论 0 6
  • 1、指针数组 指针数组:指针的数组,数组的每一个元素为此类型的指针。 如:int* a[10];数组a的10个元素...
    成江海阅读 446评论 0 0
  • 指针数组的本质是一个数组,数组里面的每一个元素存放着是指针。 char *p[3]={"hello","my","...
    ssqssqssq阅读 297评论 0 0
  • 指针数组|存储指针的数组 在C语言和C++语言中,数组元素全为指针的数组称为指针数组。 例如:int *p[10]...
    长欢姑娘阅读 293评论 1 3
  • 23:47分,安妮终于睡了,没有奶睡第四天,应该是第四天,作了几分钟,最后自己躺床上不知道翻了多少个身,睡着了,安...
    我是安妮妈咪阅读 169评论 0 0