对指针的初级理解

一.什么是指针
指针是一个变量,用来存放地址的变量。
有如下代码:
#include <stdio.h>
int main()
{
int a = 10;
int p = &a;
return 0;
}
对于这个有这样一个图解:

这里的p就是一个一级指针,它指向a的地址,而a存放的是地址内容。
二.二级指针
二级指针就是指向指针的指针,它的变量是指针变量。
如下:
#include<stdio.h>
int main()
{
int a=10;
int
pa=&a;
int *ppa=&pa;
return 0;
}
图解如下:

a的地址存放在pa中,pa的地址存放在ppa中,pa是一级指针,ppa是二级指针。
三.指针和数组
对于数组,数组名表示的是数组首元素的地址
例:
#include <stdio.h>
int main()
{
int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
printf("%p\n", arr);
printf("%p\n", &arr[0]);
return 0;
}
运行结果如下:
数组名和首地址结果是一样的。
再来看一个例子:
#include <stdio.h>
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
int
p = arr;
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
for (i = 0; i < sz; i++)
{
printf("&arr[%d] = %p<====>p+%d = %p\n", i, &arr[i], i, p + i);
}
system("pause");
return 0;
}
运行结果如下:
由此可见,p+i就是数组arr下标为i的地址,所以我们可以通过指针来访问数组。即arr[i]与 *(p+i)是等价的。

原文地址:https://blog.51cto.com/14298563/2412171

时间: 2024-10-20 03:47:43

对指针的初级理解的相关文章

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

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

指针的初级知识点总结

◆指针可以称得上是C语言的灵魂,正因为有了指针这一强大的功能,让C语言操作的灵活度能够达到一个更高的层次,同时使得C语言在各类编程语言中拥有不可取缔的地位.初学时感到C语言中的指针的相关知识点很繁琐,也很绕,进而许多概念极易混淆,特此整理指针的初级相关知识点. 1. ★指针的概念 地址与指针? 地址:C程序中的变量在占有一个可标识的存储区,每一个存储区是由若干字节组成,而每一个字节都有自己的地址,而一个存储区的地址则为该存储区第一个字节的地址.(&) 存储区访问:存储区的访问方式有直接访问和间接

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

指针和引用一直是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 引用"得到的是所指向的变量(对象)