C语言指针的高级操作
指针
指针
在上篇博客中我介绍了C语言指针的最基本操作,那么我在这篇博客中会介绍一下C语言指针的一些骚操作。
指向指针的指针
这名字乍一听有点拗口,再次一听就更加拗口了。先看定义:
type **ptr;
指向指针的指针
仅仅只比比指针只多了一个*
号,没什么很大的改变,接下在我们看一下使用:
#include <stdio.h>
void main()
{
int var = 10;
int *ptr;
int **pptr;
ptr = &var;
pptr = &ptr;
printf("ptr的值是%p\n",ptr);
printf("*ptr的值是%d\n",*ptr);
printf("pptr的值是%p\n",pptr);
printf("*pptr的值是%p\n",*pptr);
printf("**pptr的值是%d\n",**pptr);
}
这时候我们想一想&
和*
的作用就能理解了
-
&
:取地址 -
*
:从地址中取值
我们都知道,C语言指针是一个变量
,只不过变量所储存的值只能是地址罢了。那么它肯定在内存空间肯定要占一个位置,因为不可能是凭空产生的嘛,那么指针便有一个内存地址
。
所以,在上面的代码中,pptr
即代表着指针变量ptr
的内存地址
。而*pptr
代表的便是指针ptr
的值
即var
的内存地址
,所以**pptr
便代表的是var
的值。
代码运行结果如下:
ptr的值是0x7ffe3aee9994
*ptr的值是10
pptr的值是0x7ffe3aee9998
*pptr的指向的值是0x7ffe3aee9994
**pptr的指向的值是10