zoukankan      html  css  js  c++  java
  • 01深入理解C指针之---指针含义符号

    该系列文章源于《深入理解C指针》的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教。

    1、指针的含义:

    指针本身也是变量,与其他一般变量不同的是:指针变量中没有存储具体类型的数据,而是存储这一串16进制的值。这串值,就是内存的地址。计算机的OS运行时,管理内存过程中,为了高效管理内存,为内存进行编号,以字节为单位编号。而内存的地址存放到变量中。这样看来,指针的地址也是地址,指针变量中的值也是地址。

    2、*符号的作用

    (1)声明指针变量使用

    (2)解指针变量,取出指针值中对应地址的值

    3、&符号的作用

    取变量的地址

    请看例子,非常简单,但是说明的问题还是很多:

     1 #include <stdio.h>
     2 
     3 int main(int argc, char *argv)
     4 {
     5     int num = 10;
     6     int *numptr;
     7     numptr = &num;
     8     printf("Address num: %p, value num: %d ", &num, num);
     9     printf("Address numptr: %p, value numptr: %p, value *numptr: %d ", &numptr, numptr, *numptr);
    10 
    11     return 0;
    12 }

    第一次运行结果:

    Address num: 0x7fffbfa6236c, value num: 10
    Address numptr: 0x7fffbfa62360, value numptr: 0x7fffbfa6236c, value *numptr: 10

    第二次运行结果:

    Address num: 0x7ffdbff4ff0c, value num: 10
    Address numptr: 0x7ffdbff4ff00, value numptr: 0x7ffdbff4ff0c, value *numptr: 10

    (1)声明一个变量num,实际在计算机中num是代表地址,而地址就更加具体了,变量名只是让人看起来更加习惯,在计算中是不存在这个num变量的,很明显可以看出两次运行的结果中同样的num,地址是不一样的,但是这不会影响这个变量名为num,就向人的名字一样,取名字时都是可以随便取的一样。

    (2)虽然两次的地址不一样,但是由于使用了相同的变量名num,所以使用变量访问是得到的就是同样的值为10

    (3)例中我门使用了&取地址符号,顺利得到了num的地址,两次都不一样

    (4)我们观察numptr的指针变量时,发现由于有第7行代码的作用,两次运行中,numptr的值,也就是指针代表的地址与num的地址是一样的,如果我们直接使用指针变量的变量名就是得到了num的地址,如果想进一步取得num的值,就须要*numptr,这时,*符号的作用就是取指针变量值(地址)对应的值,因此得到了num的值


  • 相关阅读:
    C#Excel上传批量导入sqlserver
    RadioButtonList 和CheckBoxList根据后天数据库的值加载时选中其选项
    vue增强第三方UI库(element-ui)
    Vue项目中简易演示axios解耦
    Vue 权限控制 使用自定义指令 代替v-if
    实现水平居中垂直居中的案例
    Sublime Text3高效开发之编写代码块(snippet)
    CSS:布局篇_用flex布局实现两边顶宽中间自适应(圣杯布局&双飞翼布局)
    CSS:盒子_每个元素都有两个盒子(《CSS世界》笔记-块级元素)
    CSS:布局篇_两边顶宽中间自适应(圣杯布局&双飞翼布局)
  • 原文地址:https://www.cnblogs.com/guochaoxxl/p/6823194.html
Copyright © 2011-2022 走看看