指针的概念

指针就是地址, 利用这个地址可以找到指定的数据

指针就是地址, 那么在使用的时候, 常常会简单的说 指针变量为指针

指针变量就是存储地址的变量

int *p1;// 申请了一个变量, 即在内存中开辟了一块内存, 存储数据

// 开辟了 8 个字节, 在 Mac 下 指针都占 8 个字节

使用指针, 实际上应该说成使用指针变量

1> 算术运算

+1 移动几个字节?

看类型: int *,  long *,  char *

2> 获得地址表示的数据

指针里面存储的是地址, 就可以将该地址中的数据取出来

寻址运算符 *&p1  -> p1

3> 修改改地址中的数据

4> 作为函数参数的使用(*****)

如果传递的不是指针变量, 而是普通的变量, 就是值传递: 函数内与函数外是两个不同的变量, 只是存储的数据相同(好比发送文件)

如果传递的是指针变量, 即传递的是地址, 那么就是引用传递: 函数内外可以看成同一个变量(好比发送链接)

由于函数参数使用指针后, 可以实现函数内变量修改后, 影响到函数外的变量. 因此常常将函数参数设置为指针类型的变量

实现利用参数返回多个数据的函数

scanf("%d", &num);

二级指针

二级指针就是指向一级指针的指针(n 级指针就是 指向 n-1 级指针的 指针)

指针的本质就是地址, 那么几级指针也只是一个地址, 唯一不同的就是寻址的结果(*p)

1>在开发中使用 二级指针的地方就是利用函数或方法返回一个 一级指针数据

2> 如果需要用函数参数返回数据, 如果返回的是一般的数据, 传递一级指针

3> 如果返回的是一个一级指针, 那么参数应该是一个二级指针

4> 如果返回的是一个 n 级指针, 那么参数应该是一个 n+1 级指针

下图中*p1指的是num的值,*p2指的是p1内存的地址,**p2也指的是num的值......

C语言一级指针与二级指针的更多相关文章

  1. (C++)函数参数传递中的一级指针和二级指针

    主要内容: 1.一级指针和二级指针 2.函数指针传递的例子 3.什么时候需要传递二级指针? 4.二级指针在链表中的使用 1.一级指针和二级指针 一级指针:即我们一般说的指针,就是内存地址: 二级指针: ...

  2. c语言中如何通过二级指针来操作二维数组

    通过二级指针去访问二维数组需要先给二级指针分配等同于二维数组行数的一维数组指针,然后把二维数组的每行首地址赋值给对应位置的一维指针上.之后就可以通过二维指针直接访问了. 参考代码如下,可以看具体注释辅 ...

  3. C指针--通过二级指针往回拉数据

    现在有这种需求,在main函数中建立一个二叉树的root结点的指针,在tree_create函数中malloc或者new一个二叉树结点,然后在main函数中能正常的访问这个新建的结点. 注:这里的tr ...

  4. C语言 二级指针内存模型①

    //二级指针第一种内存模型 #include<stdio.h> #include<stdlib.h> //说明:①:类似于int a[5]={0},数组名a是一维数组a中首元素 ...

  5. C语言二级指针(指向指针的指针)

    转载:http://c.biancheng.net/cpp/html/85.html 指针可以指向一份普通类型的数据,例如 int.double.char 等,也可以指向一份指针类型的数据,例如 in ...

  6. C语言二级指针底层实现

    C语言中,Pointers to Pointers,即二级指针. 一级指针和二级指针的值都是指向一个内存单元: 一级指针指向的内存单元存放的是源变量的值, 二级指针指向的内存单元存放的是一级指针的地址 ...

  7. 深入理解C语言-二级指针三种内存模型

    二级指针相对于一级指针,显得更难,难在于指针和数组的混合,定义不同类型的二级指针,在使用的时候有着很大的区别 第一种内存模型char *arr[] 若有如下定义 char *arr[] = {&quo ...

  8. OpenCV二维Mat数组(二级指针)在CUDA中的使用

    CUDA用于并行计算非常方便,但是GPU与CPU之间的交互,比如传递参数等相对麻烦一些.在写CUDA核函数的时候形参往往会有很多个,动辄达到10-20个,如果能够在CPU中提前把数据组织好,比如使用二 ...

  9. C语言之一维数组与指针

    一维数组: 假如有一维数组如下: ]; 该数组有3个元素,数据类型为char型,地址空间如下. 如果想访问数据,直接使用a[0].a[1].a[2]取出相应地址空间的值即可 一级指针: 指针即地址,c ...

随机推荐

  1. 讲讲Handler+Looper+MessageQueue 关系

    Handler+Looper+MessageQueue这三者的关系其实就是Android的消息机制.这块内容相比开发人员都不陌生,在面试中,或者日常开发中都会碰到,今天就来讲这三者的关系. 概述: H ...

  2. C#中string.format的格式和用法

    String.Format 方法的几种定义: String.Format (String, Object) 将指定的 String 中的格式项替换为指定的 Object 实例的值的文本等效项. Str ...

  3. GitHub一代:我们都是开源控

    我们是新的GitHub一代?GitHub塑造了新式开源文化?嗯,看看十几年开源控.Getable CTO Mikeal Rogers 是怎么说的吧: GitHub本来想做一个开源软件协作平台,结果做着 ...

  4. ASP.NET MVC系列:控制器的Edit方法

    在前面我们已经介绍了如何创建控制器.视图和数据模型,运行之前的项目并打开Movies主页,将鼠标悬停在“编辑”菜单上,你会看到浏览器右下角显示了“编辑”链接的地址

  5. 插入排序---希尔插入排序算法(Javascript版)

    取一个小于n的整数作为第一个增量,把序列分组.所有距离为增量的倍数的元素放在同一个组中.先在各组内进行直接插入排序:然后,取第二个增量(第二个<第一个)重复上述的分组和排序,直至所取的增量=1, ...

  6. ASP.NET MVC的TextBoxFor()和TextBox()

    先来看看2者的语法:TextBoxFor():MvcHtmlString Html.TextBoxFor(Expression<Func<TModel,TValue>> exp ...

  7. asp.net获取站点根目录下子目录的名称

    使用Visual Studio建立一个.aspx文件(Web Forms),例如hovertree.aspx,在页面上加入一个ListBox代码如下: <asp:ListBox runat=&q ...

  8. kendo ui的treeView节点点击事件修改和grid的配置的一点总结

    kendo-ui的treeView节点(node)点击时  可以触发一个select的事件(event),并且连续点击多次相同节点,可以触发并且只能触发一次该事件. 可是需求上需要实现:每次点击相同的 ...

  9. Linux命令速查手册,超详细Linux命令教程

    一.常用命令速查 ls cd pwd cat more less tail head cp scp mv mkdir rmdir touch rm ps kill top free clear tre ...

  10. 「Ionic」創建新項目

    1.創建新項目 创建一个名为myApp的还有tabs的项目(ionic start <project-name> <optional-template>) 可选模板为sidem ...