指针(从一级指针到二级指针)

指针(从一级指针到二级指针)

一、一级指针

1.指针是什么?

在计算机科学中,指针(Pointer)时编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。

简单来说,指针就是地址,指针变量就是代表地址的变量。

2.举例
//指针指向元素
 int a=5;
 int* p=&a;  //这里的p就是一个一级指针,它指向的是a的地址。p里存放的就是a地址的内容。

 int a = 10;
 int* p = &a;                       //  指针类型一定要与指针所指向数据的类型相同
 printf("%d\n", *p);             // *p 就是解引用,原理是通过访问 p 里面存放的地址找到这个地址所指向的元素
 
 printf输出的结果是: 10
//指针指向数组
 int arr[10]={ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
 int* p=arr;
 printf("%d\n",*p);
 printf("%d\n", *(p + 1));    // 这里面 p +1 其实是 增加了 P 所指向数据类型大小字节的空间,p 开始是 1 的 地址, p +1:  因为 p 是int 型 指针,int 占 4个字节,所以要给 p 里面的地址加上 4,这样 p 的内容就变成给了 2 的地址;
 
 printf输出的结果是:
  1
  2

二、二级指针

1.什么是二级指针?

A(即B的地址)是指向指针的指针,称为二级指针,用于存放二级指针的变量称为二级指针变量.根据B的不同情况,二级指针又分为指向指针变量的指针和指向数组的指针。
在这里插入图片描述

2.指向指针变量的指针

在如上的A指向B、B指向C的指向关系中,如果A、B、C都是变量,即C是普通变量,B是一级指针变量,其中存放着C的地址,A是二级指针变量,其中存放着B的地址,则这3个变量分别在内存中占据各自的存储单元,它们之间的相互关系下图所示,相互之间的前后位置关系并不重要.此时,B是一级指针变量,B的值(即C的地址)是一级指针数据;A是二级指针变量,A的值(即B的地址)是二级指针数据。

//指针指向指针变量
 int a=10;
 int* p=&a;
 int** Q=&p;  //Q就是一个二级指针,它指向的是p的地址。Q里面存放的就是p地址的内容。
 printf("%d\n",**Q);

printf输出的结果是:10
3.指向数组的指针

在C语言中,数组与其它变量在使用上有很大的不同.无论是字符型、整型、实型变量,还是结构体类型或者指针类型的变量,语句中出现变量名都代表对该变量所在内存单元的访问,变量名代表整个变量在内存中的存储单元,可以向该变量赋值,也可以从中取出数据使用.但是定义一个数组之后,数组名并不代表整个数组所占据的内存单元,而是代表数组首元素的地址。

 int arr[10]={ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
 int* p={arr,arr+1,arr+2,arr+3,arr+4};
 int**Q=p;
 printf("%d\n",**Q);
 printf("%d\n",**(Q+1));
 printf("%d\n",**(Q+2));
 printf("%d\n",**(Q+3));
 printf("%d\n",**(Q+4));

printf输出的结果是:
1
2
3
4
5
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值