指针数组 与 数组指针的分别?

csm1989 2011-02-09 12:33:12
各位大大, 偶是刚学习 C++ 的一个菜鸟,
想问一下指针数组和数组指针的分别 以及它们的应用
顺道问问, stack 和 heap 到底是啥? 它們与指针数组和数组指针有啥咪的关系?

p.s.学习这门课已经死掉很多脑细胞了
...全文
196 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangsongcui 2011-02-09
  • 打赏
  • 举报
回复
指针数组首先是一个数组,这个数组存放指针元素。
数组指针是个指针,只不过这个指针指向一个数组。
stack是栈,LIFO的数据结构。
heap是堆,在数据结构和内存管理上是不同的东西。
kongzhitai 2011-02-09
  • 打赏
  • 举报
回复
指针数组:元素是指针
数组指针:指向一个数组
函数指针:指向一个函数
栈:一段内存,可以在内存的顶端执行后进先出操作。
堆:用new分配的内存。
梁诚斌 2011-02-09
  • 打赏
  • 举报
回复
指针数组是一个数组,里面的每一个元素都是指针
数组指针是一个指向数组的指针
例如:
int* a[10];就是指针数组

如果我声明一个指针
int** pBufPoint;
pBufPoint = &a; //这里的a就是上面的指针数组的名字
这个pBufPoint就是数组指针,因为可以通过*pBufPoint找到a这个指针数组
即你可以用a[i]获取指针数组的一个元素,也可以通过(*pBufPoint)[i]获取,两者的作用是一样的
关于stack和heap都是内存中的空间
当你用
int a;
char b;
声明变量时这些变量的内存空间都是从STACK(栈)上分配的
而用
int *a = new int[10];
这类用到new操作生成的变量都是从HEEP(堆)上获取内存空间的
sghdls 2011-02-09
  • 打赏
  • 举报
回复


我也想知道 stack 和 heap 的 具体区别和联系
proorck6 2011-02-09
  • 打赏
  • 举报
回复
指针数组是数组,数组指针是指针。
欣客 2011-02-09
  • 打赏
  • 举报
回复
例如:
指针数组
int *ap[3]; 由于‘*’是自右向左结合,因此从右向左看,首先看到[3]说明是一个数组,是一个包含3个元素的数组,然后看到‘*’,显然是指针类型,由此可以看出数组中存放的是指针而不是一般的类型。


数组指针:指向一个数组的指针。
例如:int (*ap)[3]; 这样就说明了一个指向包含有2个元素的整形数组的数组指针。

详见:http://blog.csdn.net/gotomic/archive/2008/07/02/2606791.aspx


csm1989 2011-02-09
  • 打赏
  • 举报
回复
谢一个 ~~~
bdmh 2011-02-09
  • 打赏
  • 举报
回复
指针数组是 一个数组,里面的元素是指针类型
而数组指针,是一个数组,不管里面元素是什么类型,然后有一个指针,初始时指向这个数组的首地址
liutengfeigo 2011-02-09
  • 打赏
  • 举报
回复
一个个理解透。不能着急
  • 打赏
  • 举报
回复
a[0]= new int[3]; 一个长度为3的整数数组,由指针a[0]指向数组的首地址(第一个元素)
给这个数组赋值:
for(int i=0;i<3;i++)
*(a[0] + i) = i;
a[0]+0是数组第一个元素的指针,a[0]+1是第二个元素的指针,a[0]+2是第三个元素的指针
由于a[0]是该数组的首元素,类似数组名的作用,因此可以用a[0]作数组名,采用下标的形式获取元素:
for(int i=0;i<3;i++)
cout << a[0][i] ;

a[1]= new int(5);整数指针a[1]指向在堆上创建的一个整数

a[0]是一个指针,cout << a[0]就是输出这个指针的值(而非其指向对象的值)
*a[0]是对整数型指针a[0]解引用,输出它指向的整数的值
(*a)[0],a是指针数组,它的元素是指针,根据数组名代表数组首元素地址的原则,可以得出如下等式:
(*a)=a[0],那么(*a)[0]=a[0][0],很明显是数组第一个元素的值(下标解了引用)
同理,(*a)[1] = a[0][1],是a[0]数组的第二个元素,所以,别看(*a)[1]有个[1],其实它和a[1]没一点关系
csm1989 2011-02-09
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 challeng_everything 的回复:]

指针数组是一个数组,里面的每一个元素都是指针
数组指针是一个指向数组的指针
例如:
int* a[10];就是指针数组

如果我声明一个指针
int** pBufPoint;
pBufPoint = &a; //这里的a就是上面的指针数组的名字
这个pBufPoint就是数组指针,因为可以通过*pBufPoint找到a这个指针数组
即你可以用a[i]获取指针数组的一……
[/Quote]

谢一个 ~~~
可是想问一下(请看代码)


#include <iostream>
#include <string.h>
using namespace std;

void main()

{
int *a[2]; // 指针数组
a[0]= new int[3]; // 使用 [] 和 () 的意思是啥咪? 其实我不明白整句的意思 ~~
a[1]= new int(5);

cout << a[0] << endl << a[1] << endl;

cout << *a[0] << endl << *a[1] << endl;

cout << (*a)[0] << endl << (*a)[1] << endl; // 为啥我用 *a[1] 和 (*a)[1] 的结果会不一样滴?

delete a[0];
delete a[1];
}

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧