C++中“指针的指针”用法
来源:互联网 发布:windows iso镜像 编辑:程序博客网 时间:2024/05/16 16:21
系统使用4B的内存来存一个指针,也就是说我们申请了一个指针比如int *a=NULL,那么系统将为你分配4B的内存,而我们如果要再定义一个变量来存放指针的的内存地址,那么就需要指针的指针,比如,int **b=&a;
“指针的指针”最常用的地方是在函数传值上,以及数组使用,其他用的地方我还没遇到。
先说函数。
内存的分配方式有3种:
1 . 从静态存储区分配;
2 . 从栈分配;
3 . 从堆上分配,new ,malloc都是从这里分配的内存。
函数的执行是在栈上执行的,函数中的局部变量都是在栈上分配的,在函数执行结束返回时这些变量都被销毁了,所以在函数返回的时候千万不要返回栈上的数据指针,要不然返回的指针所指向的数据都是垃圾数据。
一般函数的返回值就够我们使用了,但是如果我们需要返回两个以上的参数,或者函数的返回值有其他用途(比如返回错误代码),我们的函数要返回值就要从参数获得了,这样的话我们要定义一个变量,然后把这个变量的地址传给函数,在函数的执行过程中对这个地址的内容进行修改,因为这个地址不在函数所在的栈,函数返回时它不会被销毁,这样就达到返回值的目的。
比如一个函数是这样定义的:
- BOOL func(int *a)
- {
- *a = 2;
- return TRUE;
- }
- int nAge;
- BOOL nAge = func(&nAge);
int *pAge;
BOOL nAge = func(&pAge);
func函数就应该这样写了:
BOOL func(int **a)
{
// a 为指针的指针,*a为指针,**a为指针指向的地方,一个int值
*a = 2; //这是给指针赋值,
**a = 3; //这是给指针指向的地方填值
return TRUE;
} // 这个函数不要使用,它将内存地址为2的地方4个字节赋了个3 ……
当然了,一个int的变量用不着指针的指针,但是如果是一个链表的节点,链表的节点是用指针指着的,在函数中要对这个指针修改,就要传进指针的地址,那么这个指针的地址就要用指针的指针来存放了。(这句话到点子上了,chrisliu 注释)
总之一句话,指针的指针就是存放了一个指针的地址的变量,它是一个变量,它占用4B的存储空间,一个实实在在的东西。它的用处是在函数中用来传出来指针值的。
如果各位还发现有什么其他用处,大家就踊跃跟贴,呵呵,谢谢!
指针的指针已经够用了,至于指针的指针的指针,好象没什么用处,不用说了。
另外如果大家对COM有兴趣的话,就会发现COM的函数很多都用的是双星**参数,它们都是传出这个意思。
以上仅是我个人认识,如果有错误,请大家提出来共同学习! :)
- C语言中函数指针的用法
- C中函数指针的用法
- C语言中指针的用法
- C语言中指针的高级用法
- c中指针的指针
- C++中“指针的指针”用法
- C++中“指针的指针”用法
- c语言指针的用法
- C函数指针的用法
- C函数指针的用法
- c语言指针的用法
- C指针的用法总结
- C指针的用法小结
- 函数指针的用法(C++)
- C++this指针的用法
- C 语言指针的用法
- C语言:指针的用法
- 指针, 指针的指针, 数组, 指针数组, 数组指针, 指针函数, 函数指针 C/C++中函数指针的含义
- 快速上手Gobject
- Flex与Spring整合时SpringFactory
- windows gtk+ 开发环境搭建
- junos命名规范
- Spring源码解析(一) Spring事务控制之Hibernate
- C++中“指针的指针”用法
- 获得类型为PROV_RSA_FULL的默认CSP类型
- OSGI 之 Declarative Service (1)
- WinDbg关联dump文件
- C++内存对齐机制
- 解决ADB server didn't ACK * failed to start daemon *
- 基于Jetty的内嵌式服务器
- TextBox
- QT中文支持(1)