• C语言指针


    变量的 直接访问 方式

         按变量的地址(变量名/变量的外号) 存取变量的值

    image

    变量的 间接访问 方式

         将变量的地址放在另一个内存单元中,先到另一个内存单元中取得变量的地址,再由变量的地址找到变量并进行数据存取

    image 

    image

    变量Pointer是一个指针变量(本身是一个变量),它存储的是另一个变量的内存地址(i的内存地址),我们说pointer指向i

    一个变量存储了另一个变量的内存地址,我们说它指向i(另一个变量)

    什么是指针

    指针的概念:一个变量的地址称为该变量的指针

    指针变量:专门用于存储其它变量地址的变量

    指针与指针变量的区别,就是变量值与变量的区别

    image

    指针变量的三要素

    • 指针变量的类型 :和其所指变量的类型一致
    • 指针变量的值:另一个变量在内存的地址
    • 指针变量的名字:起法同普通变量

    指针变量的赋值:

    float *p1=p1的地址

    方式一:指针变量名 =&变量名; &->取地址符

    方式二:通过另一个指针变量赋值

    int i ,*p1,*p2; //声明一个变量i,指针p1和指针p2

    赋值方式一:p1=&i

    赋值方式二:p2=p1

    image

    指针的运算

    1、算术运算

    例如:int *p,i;

    char *q,c;

    p=&i;

    q=&c;

    内存地址示意义如下:

    image

    int 型占据 2个字节,char型占据1个字节

    求: p++ ,q++

    p++ 即 i的地址移1位(2个字节)

    image

    q++,即c的地址移动1位(1个字节)

    image

    2、比较运算

    数组的名称就是一个指针

    image

    3、两个运算符

    *:求其后内存地址中的内容

    &:求变量的内存地址

    image 

    image

    pointer_1指向a,pointer_2指向b

    -----------------------  分割线 ---------------------

    image

    练习

    问:若已执行了 pointer_1=&a,则:&*pointer_1的含义是什么?

    答:pointer_1=&a ,这时pinter_1存储的是 a的地址,

    *pinter_1 是取指针所指向的值,也即 a

    所以 &*pinter_1 就是取 a的地址,相当于 &a

    *取内容,&取地址,两者是互异的,互相抵消

    问:*&a的含义是什么?

    答:&a取的是地址,*地址取的是内容,所以*&a 就是a

    问:(*pinter_1)++相当于什么?

    答:*pointer_1 是取pointer_1所指向的值,所以这里相当于 a++

  • 相关阅读:
    UML学习
    A problem has been encountered while loading the setup components. VS2008
    C#获取资源中的图片文件
    [网络技巧]一个网线头来测试网络程序
    通过传递"窗体的名字"来实例化窗体
    [解决方案] Flex TypeError: Error #1007: 尝试实例化的函数不是构造函数。
    Flex编译器的一些参数
    ArcGIS 9.3安装流程(包括Desktop和Server)
    Oracle Wrong solution [整理中]
    What's DOM?(1)
  • 原文地址:https://www.cnblogs.com/zhaoqingqing/p/3916534.html
Copyright © 2020-2023  润新知