美文网首页
这样子来理解C语言中指针的指针

这样子来理解C语言中指针的指针

作者: 胖一一 | 来源:发表于2019-02-26 21:39 被阅读0次

友情提示:阅读本文前,请先参考我的之前的文章《从四个属性的角度来理解C语言的指针也许会更好理解》,若已阅读,请继续往下看。

我从4个属性的角度来总结了C语言中的指针概念。对于C语言的一个指针,比如int *p,4个属性分别如下:

C语言指针p=(指针自己的值,与星号结合名,有用数据的值,有用数据的类型);

这4个属性用来理解C语言中单个指针可以,那么本篇再用这4个属性来解释C语言中的“指针的指针”。

C语言中指针的指针,好多教材一般给出的定义是“变量的地址的地址”,或者是“指针的地址”,这满满的都是套路啊,理解一个地址就很难了,还地址的地址,深怕我们晕的还不够瓷实?好吧,先上一段代码,如下:

#include <stdio.h>
int main(void)
{
int a = 1; //定义一个普通的整型变量a,初始值是1
int *p = NULL; //定义一个C语言的指针变量p,初始值是NULL;
int **pp = NULL; ////定义一个C语言的指针的指针变量pp,初始值是NULL;
p = &a; //指针p的值是变量a的地址;
pp = &p; //指针的指针pp的值是变量p的值;
printf("整型变量a的值是%d, 整型变量a的地址是%x\n", a, &a); //输出变量a的值和变量a的地址
printf("指针p的地址是%x, 指针p的值是%x, 整型变量(*p)的值是%d\n", &p, p, *p); //输出变量p的地址,变量p的值,变量p指向的值
printf("指针的指针pp的值是%x, 整型变量(*pp)的值是%x\n", pp, *pp); //输出变量pp的值,pp指向的值
return 0;
}

代码的含义已经在代码注释中写出来了。看上去有点晕啊,又是“地址”,又是“指针”的,还有“指针的指针”。。。。。。

再贴个运行的结果,如下:


image.png

对此结果做个解释:

1.有一块内存区域,它的名字叫“a”,它的地址是“22fee8”,里面存了一个值“1”;

2.又有一块内存区域,它的名字叫“p”,它的地址是“22fee4”,里面存了一个值“22fee8”;

3.又又又有一块内存区域,它的名字叫“pp”,里面存了一个值“22fee4”;

好了,现在咱就用那4个属性来分析下C语言指针p和指针的指针pp。先看下指针的指针pp。套用4个属性:

C语言指针的指针pp=(指针自己的值,与星号结合名,有用数据的值,有用数据的类型)

将每个属性具体化,在本文中就是:

C语言指针的指针pp=(22fee4,p,22fee8,int)

哈哈,有没有看出什么名堂出来?

第1个属性值“22fee4”是指针的指针pp自己的值,一般没什么用处,所以不用去关心。从第2个属性开始,也就是:p,22fee8,int,这些都是指针p的属性啦,如下图所示:

image

那么:

C语言指针的指针pp=(22fee4,p,22fee8,int)可以写为:

C语言指针的指针pp=(22fee4,指针p的第1个属性,指针p的第1个属性的值,指针p的第4个属性);

也就是从第2个属性开始,就可以抛弃指针的指针pp,不用去想这个pp了,请完全用指针p的思维来考虑问题。

好了,现在再从4个属性来考虑指针p:

C语言指针的指针p=(指针自己的值,与星号结合名,有用数据的值,有用数据的类型);

再将每个属性具体化,就是:

C语言指针的指针p=(22fee8,a,1,int);

哈哈,又看出啥名堂来了吧?

第一个属性值“22fee8”是指针p自己的值,一般也没什么用处,所以也不用去关心。从第2个属性开始,也就是:a,1,int就是变量a的属性啦,如下图所示:

image

相关文章

  • 这样子来理解C语言中指针的指针

    友情提示:阅读本文前,请先参考我的之前的文章《从四个属性的角度来理解C语言的指针也许会更好理解》,若已阅读,请继续...

  • 02-C语言的指针

    02-C语言的指针 目标 C语言指针释义 指针用法 指针与数组 指针与函数的参数 二级指针 函数指针 指针在C中很...

  • C语言05- 指针

    C语言05- 指针 13:指针 指针是C语言中的精华,也是C语言程序的重点和难点。 13.1:指针定义与使用 指针...

  • 链表代码注意事项

    1、理解指针或引用的含义 比如C语言是指针,就是相当于JAVA的引用 2、警惕指针丢失和内存泄漏 C 语言,内存管...

  • Go语言 值,指针,引用类型

    Go语言的指针与C或C++的指针类似,但是Go语言的指针不支持指针运算,这样就消除了在C或C++程序中一些潜在的问...

  • 指针数组&数组指针

    本节继续讨论C语言中的指针。 指针数组&数组指针 先理解一下什么是指针数组和数组指针,指针数组的实质是个数组,这个...

  • C语言函数指针和指针函数

    C语言函数指针和指针函数 在学习C语言的过程中,“指针函数”和“函数指针”经常容易搞混了, 最简单的辨别方式就是看...

  • Golang 指针

    指针 区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针。Go语言当中的指针涉及到三个点:指...

  • [C]C语言指针

    Blog C语言指针详解 C语言字符串操作 指针的作用 指针是程序数据在内存中的地址,指针变量是用来保存这些地址的...

  • 2.7-C语言入门-指针

    1.指针的含义-变量的地址 a.指针:C语言中用“指针”来表示内存地址(即:指针指向了内存地址),即“指针”可理解...

网友评论

      本文标题:这样子来理解C语言中指针的指针

      本文链接:https://www.haomeiwen.com/subject/nazzyqtx.html