关于指针的一些理解

1. 指针的定义

指针保存的是所指向的对象的地址。

int a = 3;
int *p = &a; // 定义一个指向整形数a的指针p,此处,int代表p是指向一个整形数的指针,*表明
             // 当前定义的是一个指针,p的值为&a,即a的地址

上面的指针也可以这样定义

int *p;
p = &a;

2. 指针的指针

同理,我们可以定义一个指向指针的指针, 它保存的是所指向的指针的地址

int a = 3;
int *p = &a;
int **q = &p; //**说明是指向指针的指针

3. 指针内容的读取

上面的程序中,指针p的值是a的地址,我们想通过p来得到a的值,则用*p; 通过q来获取a的值,则用**q。

printf("a‘s address is: %p.\n", &a); 
printf("p‘s value is: %p.\n", p); //地址的占位符都是%p
printf("p 指向的对象的值: %d.\n", *p);
printf("p‘s address is : %p.\n", &p);
printf("q‘s value is: %p.\n", q);
printf("q 指向的指针的值: %p.\n", *q);
printf("q 指向的指针指向的对象的值: %d.\n", **q);

上面代码的输出:

a‘s address is: 0x7fff5bce5a9c.

p‘s value is: 0x7fff5bce5a9c.

p 指向的对象的值: 3.

p‘s address is : 0x7fff5bce5a90.

q‘s value is: 0x7fff5bce5a90.

q 指向的指针的值: 0x7fff5bce5a9c.

q 指向的指针指向的对象的值: 3.

实际上就是说:

a == *p == **q;

&a == p == *q;

&p = q;

ID: q p a
地址: &q    &p &a
值: &p    &a   3
时间: 2024-10-20 23:40:49

关于指针的一些理解的相关文章

seach tree的deletion的实现——对树的指针的进一步理解

一颗binary search tree,我们要在其中删除node1.而node1对应的key是,比如说,key1.删除的基本想法是什么呢? 1.找到key1对应的那个node在哪里.这个用一个迭代就可以完成了. 2.删掉这个node (1)如果这个node没有左右子树,那么直接删掉就好了. (2)如果这个node只有左子树或者右子树,那么直接让左右子树缩进上来就好了. (3)如果既有左子树又有右子树,那么就从左子树里面找出最大的node,用这个node来替换掉需要删除的那个节点. 举个栗子:有

关于引用和指针的简单理解

指针和引用一直是C++中难懂的部分,为此我也困惑了很久,下面说说我对引用和指针的简单理解. 在使用函数时我们常常会纠结实参传递到形参后,函数对形参的操作会不会改变实参的值(也就是主函数的相应变量),最典型的例子是swap(int a,int b).我们都知道,函数在调用时会给变量重新开辟一个存储空间,而这个存储空间会暂时存储形参的值,如果函数在调用完毕后,其相应存储空间的值会被释放.例如下面一段代码: void swap1(int a, int b) { int temp = 0; temp =

Linux中文件描述符fd和文件指针flip的理解

转自:http://www.cnblogs.com/Jezze/archive/2011/12/23/2299861.html 简单归纳:fd只是一个整数,在open时产生.起到一个索引的作用,进程通过PCB中的文件描述符表找到该fd所指向的文件指针filp. open:文件描述符的操作(如: open)返回的是一个文件描述符(int fd),内核会在每个进程空间中维护一个文件描述符表, 所有打开的文件都将通过此表中的文件描述符来引用(fd1,fd2,fd3...); fopen:而流(如: f

JavaScript——对this指针的新理解

一直以来对this的理解只在可以用,会用,却没有去深究其本质. 这次,借着<JavaScript The Good Parts>,作了一次深刻的理解. 下面我们一起来看看这个this吧. 在我们声明一个函数时,每个函数除了有定义时的parameters(形参),自身还会有额外的两个参数,一个是this,一个是arguments(实参).arguments就是函数实际接受到的参数,是一个类数组.arguments我只做个简略的介绍,重点我们放在this指针上. 在面向对象变成中,this十分重要

C语言指针的深入理解

指针是C语言中广泛使用的一种数据类型.运用指针编程是C语言最主要的风格之一. 利用指针变量可以表示各种数据结构:能很方便地使用数组和字符串:并能象汇编语言一样处理内存地址,从而编出精练而高效的程序.指针极大地丰富了C语言的功能. 学习指针是学习C语言中最重要的一环,能否正确理解和使用指针是我们是否掌握C语言的一个标志. C语言为什么有指针以及指针有什么好处? 从大体上讲:指针是 C 语言区别于其他同时代高级语言的主要特征之一.其次因为数组或函数都是连续存放的.通过访问指针变量取得了数组或函数的首

C语言(四)指针概念的理解

转载请标明出处: http://blog.csdn.net/u011974987/article/details/52270018: 前言 最近真的是忙的不可开交,公司一直给安排任务,连学习和写笔记的时间都没有了,落下好几次课的笔记都没有写,所以我抽空把目前的进度给追上来,不然会越落越多.加油吧~(感觉身体都要被掏空了) 指针 我们通过指针,可以简化一些 C 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的.所以,学习指针是很有必要的. 正如您所知道的,每一个变量都有一个内存位

JavaScript中指针和地址理解

个人理解:指针只是指向内存的一个索引:而地址则是内存中确切的位置. 下面是函数中关于指针和地址一个小例子: function sum(num1,num2){ return num1+num2; } alert(sum(10,10)); //20 var anotherSum=sum; alert(anotherSum(10,10)); //20 sum=null; alert(anotherSum(10,10)); //20 注意:使用不带圆括号的函数的名是访问函数指针,而非调用函数,所以 su

c++引用和指针的彻底理解

 ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:引用是某块内存的别名.  ★ 区别: 1. 指针是一个实体,而引用仅是个别名: 2. 引用使用时无需解引用(*),指针需要解引用: 3. 引用只能在定义时被初始化一次,之后不可变:指针可变: 引用"从一而终" ^_^ 4. 引用没有 const,指针有 const,const 的指针不可变: 5. 引用不能为空,指针可以为空: 6. "sizeof 引用"得到的是所指向的变量(对象)

2015.8.5关于指针的个人理解

1.要区分指针的类型和指针所指向的类型 1.1指针的类型:把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型. eg:   int *a;去掉‘a’,得到“int *”,所以该指针的类型就是int *,即该指针是一个指向整型变量的指针: char *str;去掉“str”,得到"char *",所以该指针的类型就是char *,即该指针是一个指向char型变量的指针: int **ptr;去掉“ptr”,得到“int **”,故改指针的类型就是“int **,即该指针是一个指

C语言二级指针的一些理解

最近在重新学习<C和指针>,指针那一章里面的一个例子——在一串字符串中查找特定的字符:版本2中有一句看不太明白,*(*string)++,于是写程序测试.琢磨了一下. 测试程序这样: #include <stdio.h> int main() { char str1[] = "ABCD"; char str2[] = "EFGH"; char *pStrArray[2] = { str1, str2 }; char **pStr1 = pSt