zoukankan      html  css  js  c++  java
  • C/C++中的*和& 分类: 杂文 编程 2014-10-25 11:03 77人阅读 评论(0) 收藏

    最近看程序的时候对&和*的理解还是有点问题,索性写篇文章重头理清一下。

    首先,左值和右值的问题。

    我们知道对于*和&,左值和右值的含义是不一样的,如

    1. #include <stdio.h>
    2. int main(void)
    3. {
    4.     int a = 0;
    5.     int *p = &a;
    6.     printf("The value is: %d/n", *p);
    7.     return 0;
    8. }

    *表示的是指针,int 是指针的类型,int *p是定义一个整型的指针p,指向的是变量a的地址.而等式右边的&是取地址,&a是变量a的地址。可以看出,左边的*和右边的&是相对应的,我们只能把右边变量的地址值赋给指针,而不能把变量直接赋给指针。

    1. #include <stdio.h>
    2. int main(void)
    3. {
    4.     int a = 0;%地址是0x0012ff60
    5.     int *p = a;
    6.     printf("The value is: %d/n", *p);
    7.     return 0;
    8. }
    有意思的是,即使我们知道&a的输出值是1638208,我们也不能直接把1638208赋给*p,如下是运行不了的

    1. #include <stdio.h>
    2. int main(void)
    3. {
    4.     int a = 0;%地址是0x0012ff60
    5.     int *p = 1638208;
    6.     printf("The value is: %d/n", *p);
    7.     return 0;
    8. }

    综上,

    *作为左值时,是类型,int *p可以理解为int* p,p是整形指针类型,存储的值是与整形指针类型对应的地址类型&a,而且这个地址中存储的值也是整数类型的,地址&a(p)可以以整数的形式显示出来,但是不能接受整数的赋值。

    *作为右值时,是操作,p本身是指针类型,但是p的值是地址,*p可以理解为通过指针类型p中的地址去找到地址中的值。

    &作为左值时,是类型, int &p=a是定义一个整形的引用p.

    &作为右值时,是操作,取地址的操作。


    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    Exadata存储节点的CPU限制成功了没?
    如何减少Exadata计算节点CPU的Core数量
    如何选择适合你的HTAP数据库?
    小知识:Oracle中的层次查询
    小知识:使用MOS下载Oracle介质快速参考
    小知识:Flex ASM特性对集群资源显示的影响
    javaWeb request请求乱码、response响应中文乱码一站式解决方案
    java 文件File与byte[]数组相互转换的两种方式
    pr 如何调高导出视频的清晰度?
    pr 剪辑视频之剃刀用法
  • 原文地址:https://www.cnblogs.com/learnordie/p/4656999.html
Copyright © 2011-2022 走看看