指针和引用

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

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

 

code:
int a = 5;
int *p = &a;
printf("%d \n", p);
printf("%d \n", *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 \n", &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 \n", &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的内存里数据,显然这是有问题的

 

时间:2022.0306

补充:sizeof(引用)计算的是变量本身占据的内存大小

示例:

    short int j = 5;
    int &m = i;
    short int &n = j;
    int a = sizeof(m);
    int b = sizeof(n);
    cout << "sizeof(m) = " << a << endl;
    cout << "sizeof(n) = " << b << endl;

输出:

4

2

 

posted @ 2017-06-21 11:36  N_zero  阅读(170)  评论(0编辑  收藏  举报