如何理解指针的指针?

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:Maples7
链接:http://www.zhihu.com/question/29180416/answer/50338124
来源:知乎

为了提高函数封装性,避免使用全局变量。
比如使用链表时,你有一个头结点指针。
在某个函数中你需要对头结点指针进行修改,如果只是将头结点指针当成形式参数传进函数,函数里面的参数只是一个对头结点指针的副本,作用域只是在函数内部,在函数里面对它的任何操作不会影响函数外真正的头结点指针。

时间: 2024-08-14 15:31:49

如何理解指针的指针?的相关文章

从一个简单例子来理解js引用类型指针的工作方式

? 1 2 3 4 5 6 7 <script> var a = {n:1};  var b = a;   a.x = a = {n:2};  console.log(a.x);// --> undefined  console.log(b.x);// --> [object Object]  </script> 上面的例子看似简单,但结果并不好了解,很容易把人们给想绕了--"a.x不是指向对象a了么?为啥log(a.x)是undefined?".&

【转载】C/C++杂记:深入理解数据成员指针、函数成员指针

原文:C/C++杂记:深入理解数据成员指针.函数成员指针 1. 数据成员指针 对于普通指针变量来说,其值是它所指向的地址,0表示空指针.而对于数据成员指针变量来说,其值是数据成员所在地址相对于对象起始地址的偏移值,空指针用-1表示.例: 代码示例:   2. 函数成员指针 函数成员指针与普通函数指针相比,其size为普通函数指针的两倍(x64下为16字节),分为:ptr和adj两部分. (1) 非虚函数成员指针 ptr部分内容为函数指针(指向一个全局函数,该函数的第一个参数为this指针),ad

理解指针,和指针的指针

理解一个事物的最好方式,就是知道它的用途. 我对指针的理解总结起来就是一句话:如果你调用函数的时候,改变一个变量的值(包括基本变量.结构体.类,指针),那么你就需要它的指针. 由于C/C++ 调用函数的时候,永远都会拷贝一份参数,所以,你怎么折腾都无法改变原来的东西(java对于对象是传引用).所以,你就需要一个指针,直接改变那个变量的内存内容.贴代码: #include "stdio.h" void changeValue(int a, int b); void changeValu

深入理解数组与指针的区别

在大一刚开始学习C的我们也许并没有真正的理解数组与指针,其实C的精华部分便是指针与内存的分配这一块. 那是充其量我们能够知道数组与指针肯定不是完全等价的,相同点就是:对数组的引用总是转化为对指针的引用,而不同点呢就是数组名是常量而指针是变量仅此而已,随着我们资历不断的提升,我们么更加进一步的去理解它,从他的本质去即内存的分配与访问去理解它. 好了,首先呢我们必须明白一个概念在C语言中,一个变量的声明和定义有什么区别. 我们知道定义只是一个特殊的声明. 定义:只能出现在一个地方,创建新对象,同时确

POJ 2752 深刻理解KMP失配指针

思路:刚开始还在想怎么做,虽然以前是理解了失配指针的用处,但是确实不知道失配指针还有如此用处,其实还有很多用处,我用得少了不懂而已. 比如: i   0  1  2  3  4  5   6  7  8  9  10 11 p[i]  A  B R A  C  A  D  A  B  R  A  无 next[i]  0  0  0  0  1  0   1  0  1   2  3   4 next[11]=4这个肯定可以取了,因为这个后缀等于前缀嘛,然后再查询next[next[11]]=n

10深入理解C指针之---指针和常量

该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教. 指针作为C语言的左膀右臂,使用方便,修改容易,引用数据快速都是很有前景的应用.C语言中常量是值不能改变的量,由于在某些应用中,想要阻止没有授权的数据的修改时,就需要将指针和常量结合起来. 一.指向常量的非常量指针:指针值可以改变,但是指针解引用值不能改变 1.特征: 1).提供一种可移植的方式来声明与系统中可寻址的内存区域一致的长度 2).用作sizeof操作符的返回值的类型 3).用作内存相

&quot;深入理解C语言&quot; 指针

本文对coolshell中的"深入理解C语言"这篇文章中提到的指针问题, 进行简要的分析. #include <stdio.h> int main(void){ int a[5]; printf("%x\n", a); printf("%x\n", a + 1); printf("%x\n", &a); printf("%x\n", &a + 1); return 0; } 假设

理解常量指针与指针常量?

constant *前面的是对被指向对象的修饰,*后面的是对指针本身的修饰 常量指针(被指向的对象是常量) 定义: 又叫常指针,可以理解为常量的指针,指向的是个常量 关键点: 常量指针指向的对象不能通过这个指针来修改,可是仍然可以通过原来的声明修改: 常量指针可以被赋值为变量的地址,之所以叫常量指针,是限制了通过这个指针修改变量的值: 指针还可以指向别处,因为指针本身只是个变量,可以指向任意地址: 代码形式: int const* p; const int* p; // // Created b

深入理解 [指针函数] 、[函数指针]、[指针的指针]、[指向指针数组的指针]

指针函数 1.指针函数是指带指针的函数,即本质是一个函数.当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用函数,以用于需要指针或地址的表达式中. 函数返回类型是某一类型的指针: 格式: 类型标识符  *函数名(参数表) int *match(void *key_x,void *key_y); 解析:首先来说它是一个函数,只不过这个函数的返回值是一个地址值.函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针

数组指针与指针数组深度理解参考

数组指针和指针数组的区别:http://www.cnblogs.com/mq0036/p/3382732.html 指针数组和数组指针的区别:http://www.cnblogs.com/Romi/archive/2012/01/10/2317898.html