在C++中为什么要使用指针?

有一说法是在存储一些大一点的数据时,将数据存在堆中,却将指向该数据的指针放到栈中,因为栈小但是运行快,堆虽然大但效率低。我想问的是难道数据大,那指向它的指针不也一样大么?那这样栈里面有足够大的空间让指针进去吗? 谢谢 新手求解
如果有高手能将指针怎样在堆 栈中运行的细节讲清楚 那真的不甚感激了!

  指针就是地址,另外还有指针变量,也就是存放地址的变量。
  指针是存放内存地址的,使编程更容易实现数据的出去和计算。
  平时使用的别的变量(指的指针变量以外的变量),就是用变量名字代表了它所在的空间,本质还是到这个地址去访问;而用指针变量访问,就是直接访问这个空间了,因此更高效。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-12-15
你述说的这种情况就像是图书的目录和页码 你要从一本书里找内容 是一页一页翻过去快呢 还是把里面的内容按标题放在目录里快呢 这里的栈就相当于目录 指针是目录里的标题 整本书是堆 页码是堆的一个个空间 如果从堆里找需要的内容 要一遍遍判断是不是要找的内容 就是一遍一遍翻过去找 你要根据指针找到你要的内容 就是按目录表示直接翻到那一页 这么说你清楚了吧追问

是否就是说栈在调用指针时只是调用的指针的地址,而不是调用指指针向它保存的数据的地址?

追答

你说的基本正确 栈相当于一个数组 只是这个数组存的都是一个个指针 堆里面存的是大堆大堆的东西 调用栈里的指针时 只是将这个指针取出来 CPU使用的指针叫IP 这个指针指向哪儿 程序就执行到哪儿 需要堆里面的数据时 只要将栈里的指针赋给IP 那么IP就指向堆里的内容 从这里执行程序

本回答被提问者采纳
第2个回答  2011-11-09
我来说下,
这个你可以看看汇编 之类的 或者 C 函数 调用 是怎么回事 ;
首先 , 对于固定架构, 指针都是一样大的, 都是指向一个内存地址
所以 相对于 大数据 指针 是很小的 像 32bit 跟个 int 差不多大

然后就是 讲个 简单的例子, 就说 结构吧,

struct a{
int a;
int b;
int c;
........
int xxxxx;
}

像这样的一个结构 , 如果 我有 他的 一个指针 p
我可以 通过 p->a p->b p->......
来 调用 其 内部的值, 结构 在 内存中 其数据 有 固定的 位置 所以 通过 指针 访问 其数据
是由 p 的 偏移 量 来实现 的 这个是 编译器的 工作 , 编译的 时候 已经 处理好了 ,
所以 这个 结构 不管多大 , 通过 指针 读取他 数据 的速度 都是 一样快的,

所以 把 指针 放到 栈 中 能有效 节省 空间 还能 节省 传递 大参数 时 所 耗费的 时间 ,
所以能更快, 而且 栈 空间 很小 很宝贵 , 不可能 把 大数据 压进去的
第3个回答  2011-11-10
指针也是数据类型。其表示一个地址。函数的参数设计尽量用指针或者引用。因为这会“节省内存拷贝的长度”(或直接通过寄存器传递)。
另外堆和栈是没差别的。 有的数据是在函数中(栈)上定义,有的是采用动态从堆内存空间分配。
栈中的数据在函数退出后会变为“无效”,而堆中分配出来的则由你自己控制。
第4个回答  2011-11-09
您好,就算数据很大,指针的内容保存的只是那段内存的基地址,一般为四个字节,所以不会很大的。
相似回答