C语言中二级指针使用
来源:互联网 发布:微信公众号矩阵案例 编辑:程序博客网 时间:2024/06/05 01:58
C/C++中使用指针可以减少函数传递的参数
例如:
typedef struct{ int r[MAX]; int length;}SqList;
调用void test(SqList s)
函数时,会把结构体SqList
拷贝一份传入函数,这样就使得效率变低。
使用指针可以传递结构体,或者数组
二维指针主要用在在子函数中有新生成的变量需要回传回主函数。
void main(){ SqList S; S.length = 10; SqList* l = &S; void test3(SqList* s); std::cout << l << " " << l->length << std::endl; test3(l); std::cout << l << " " << l->length << std::endl; SqList** ll = &l; std::cout << ll << " " << *ll << " " << " " << (*ll)->length << std::endl; void test(SqList** s); test(ll); std::cout << ll << " " << *ll << " " << " " << (*ll)->length << std::endl;}void test(SqList** s){ *s = (SqList*)malloc(sizeof(SqList)); (*s)->length = 1; std::cout << s << " " << *s << " " << " " << (*s)->length << std::endl;}void test3(SqList* s){ s = (SqList*)malloc(sizeof(SqList)); s->length = 1; std::cout << s << " " << s->length << std::endl;}
结果如下
0037EA24 100043AE80 10037EA24 100037EA18 0037EA24 100037EA18 0043BEC0 10037EA18 0043BEC0 1
使用一级指针时,使用malloc
函数重新生成的结构体变量将无法传回主函数,而是用二级指针则可以实现回传。
需要注意:二级指针仅仅是把新分配的内存地址返回去,在堆上空间的分配和回收是由程序员自己完成,所以可以正确返回新分配的内存地址的值,而那些在栈上分配空间的变量,则不能用二级指针传值,因为局部变量出了作用域就会被编译器释放,例如用在int型时,由于int型局部变量是在栈上分配存储空间的,所以回传回去实际值已经被释放,返回的值就是错误的。如下:
void main(){ int a = 10; int* p=&a; int** ptr; ptr = &p; std::cout << ptr << " " << *ptr << " " << **ptr << std::endl; void test2(int** a); test2(ptr); std::cout << ptr << " " << *ptr << " " << **ptr << std::endl;}void test2(int** a){ int b = 5; *a = &b; std::cout << a << " " << *a << " " << **a << std::endl;}
输出结果:
003DEBA8 003DEBB4 10003DEBA8 003DEAB0 5003DEBA8 003DEAB0 13083592
阅读全文
0 0
- C语言中二级指针使用
- C语言中二级指针的用处
- C语言中二级指针的作用
- C语言二级指针
- C语言二级指针
- C语言 二级指针
- C语言二级指针
- C语言二级指针与指针数组的结合使用.
- c语言之二级指针
- c语言中二级指针空间的分配
- [笔记]C语言中二级指针简单例子
- 关于C语言中二级指针的理解
- C语言中,二级指针的三种内存模型
- C语言二级指针的介绍和使用
- C语言中,一级指针,二级指针,数组,一位数组指针,二位数组指针浅谈
- C语言中的二级指针(双指针)
- C语言中的二级指针(双指针)
- C语言中的二级指针(双指针)
- 前端面试纪实(三):ES6的const和let
- 5-2 表达式转换 (25分)
- Gym
- 常用控件的使用方法
- 菜鸟眼中的vim 编译器
- C语言中二级指针使用
- 并查集模板代码实现(非递归)
- 学后感 看小甲鱼老师的Python教程有感
- 原生javascript图片轮播实现
- em,rem.px区别
- javascript中src和href的区别
- 太恐怖了。我一个大男人看了直发凉(zt)
- ZOJ 3349 Special Subsequence(DP+线段树优化)
- 简单的道理