全国咨询/投诉热线:400-618-4000

C/C++:指针数组和数组指针浅析

更新时间:2018年01月05日11时25分 来源:传智播客 浏览次数:

指针数组和数组指针这两个名字不同,当然所代表的意思也就不同。刚开始看到我就被吓到了,主要是中文太博大精深了,整个这样的简称太专业了,把人都给绕晕了。如果从英文解释或中文全称看就比较容易理解。

指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针

数组指针:a pointer to an array,即指向数组的指针

还要注意的是他们用法的区别,下面举例说明。

--------------指针----------------

int a=10;

int *p=&a; // 指向整型的指针,这个指针可以用来指向整型元素

-------------简单数组-----------------

int c[10]; // 整型数组,含有10个整型元素也就是说每一个元素都是整型

--------------指针数组 是数组--------------------

int *p1[10]; // 指针数组,含有10个指针元素也就是说每一个元素都是指针

--------------数组指针 是指针--------------------

int (*p2)[10]; // 数组指针,这个指针可以用来指向含有10个元素的整型数组

注意:在实际应用中,对于指针数组,我们经常这样使用:

typedef int* int_p;

int_p a[10];

这跟上面指针数组定义所表达的意思是一样的,只不过采取了类型变换。

代码示例如下:

#include

using namespace std;

int main(void)

{

int c[4] = {1,2,3,4};

int *a[4]; // 指针数组

int (*b)[4]; // 数组指针

b = &c;

// 将数组c中元素赋给数组a

for(int i=0;i<4;i++)

{

a[i]=&c[i];

}

// 输出看下结果

cout << *a[1] << endl; // 输出2就对

cout << (*b)[2] << endl; // 输出3就对

return 0;

}

注意:

定义了数组指针,该指针指向这个数组的首地址,必须给指针指定一个地址。容易犯的错的就是——不给b地址,直接用(*b)[i]=c[i]给数组b中元素赋值,这时数组指针不知道指向哪里,调试时可能没错,但运行时肯定出现问题,使用指针时要注意这个问题。但为什么a就不用给他地址呢,a的元素是指针,实际上for循环内就是给数组a中元素指定地址。但若在for循环内写*a[i]=c[i],这同样会出问题。

总之一句话,定义了指针一定要对指针进行初始化,知道指针指向哪里,不然就要悲剧了。

本文版权归传智播客C/C++学院所有,欢迎转载,转载请注明作者出处。谢谢!
作者:传智播客C/C++学院
首发:http://www.itcast.cn/c/

javaee

python

web

ui

cloud

test

c

netmarket

pm

Linux

movies

robot

uids

北京校区

    14天免费试学

    基础班入门课程限时免费

    申请试学名额

    15天免费试学

    基础班入门课程限时免费

    申请试学名额

    15天免费试学

    基础班入门课程限时免费

    申请试学名额

    15天免费试学

    基础班入门课程限时免费

    申请试学名额

    20天免费试学

    基础班入门课程限时免费

    申请试学名额

    8天免费试学

    基础班入门课程限时免费

    申请试学名额

    20天免费试学

    基础班入门课程限时免费

    申请试学名额

    5天免费试学

    基础班入门课程限时免费

    申请试学名额

    0天免费试学

    基础班入门课程限时免费

    申请试学名额

    12天免费试学

    基础班入门课程限时免费

    申请试学名额

    5天免费试学

    基础班入门课程限时免费

    申请试学名额

    5天免费试学

    基础班入门课程限时免费

    申请试学名额

    10天免费试学

    基础班入门课程限时免费

    申请试学名额