zoukankan      html  css  js  c++  java
  • 指针和引用

    code:
    int a = 5;
    int *p = &a;
    printf("%d ", p);
    printf("%d", *p);

    result:
    printf("%d ", p)输出的是a的地址
    printf("%d", *p)输出的是a值

    code:
    int a = 5;
    int *p = &a;
    printf("%d ", p);
    printf("%d ", *p);

    int c = sizeof(a);
    int &b = a;
    int d = sizeof(b);
    int e = sizeof(&b);
    int f = sizeof(p);
    int g = sizeof(*p);

    printf("%d ", &b);

    result:
    a 5 int
    +  &a   0x0016fca0   int *
      c   4   int   //sizeof(a), a是整形的数据,占4个字节,所以是4
      b   5   int &   //b就是a, a = 5,故为5
      d   4   int   //b就是a,sizeof(b)等同sizeof(a),所以是4
      e   4   int   //&b就是a的地址,同样占4个字节,所以是4
      f   4   int   //a的地址,同样4个字节,所以是4
      g   4   int   //指针是int类型,占4个字节,所以是4
    printf("%d ", &b)输出的是a的地址

    引用只是让变量多了一个名称(就好像同一个人有不同的称呼)


    变量的特点:
          1.名称
          2.类型,告诉编译器用多大内存来存储
          3.值
          4.地址

    int a = 5;
    这句干了什么:1.定义变量a;
           2.变量为整形数据,占4个字节
           3.变量值为5
           4.a在内存中有自己的地址(地址不等于变量值)

    至此,字符a有了多重意义:1.存放整形数据;2.存放的数据值为5;3.拥有自己的地址。a是这三重意义的一个标识符。


    int *p = &a;
    这句干了什么:1.定义变量p;
           2.变量p是指针;
           3.指针变量是指向一个int类型变量的地址;
           4.指针变量的值是&a;

    同样,字符p有了多重意义:1.p是指针;2.指针存放地址;3.存放的是int类型变量的首地址&a;4.拥有自己的地址。p是这四重意义的一个标识符。

    指针p是变量,它有自己的地址

    int *p = &a;(等价于 int *p; p = &a;)
    &*p:*p  = a,所以&*p相当于&a
    *&p:&p指向的数,也就是p本身,即a的地址
    如此*&p = p

    **P:*p是p指向的数据,而在上面已经对p进行了赋值,所以*p可以准确的找到所指向的数值;
    那么**p是指*p所指向的数据,通过上面知道*p是5,即在地址为5的内存里数据,显然这是有问题的

  • 相关阅读:
    OpenCascade Ray Tracing Rendering
    Create New Commands in Tcl
    OpenCascade Modeling Algorithms Fillets and Chamfers
    OpenCascade Modeling Algorithms Boolean Operations
    Construction of Primitives in Open Cascade
    Open Cascade Data Exchange STL
    Tcl Tk Introduction
    Open Cascade DataExchange IGES
    Netgen mesh library : nglib
    Hello Netgen
  • 原文地址:https://www.cnblogs.com/qbin/p/7058746.html
Copyright © 2011-2022 走看看