• 快速理解C语言——指针


    1、地址和内存

    把值存在内存中,内存就给每一个值分配一个地址:

    100 104 108 112 116就是每个值分别对应的地址;

    给每个内存地址起个别名,就是:变量

    2、值和类型

    如下,是我们声明的变量:

    1. int a = 112;
    2. int b = -1;
    3. float c = 3.14;
    4. int *d = &a;
    5. int *e = &c;

    值的类型并不取决于它本身,而是取决于它被使用的方式,当 c = 1078523331,被使用成整型时,它就是整型,被使用成浮点型时,就是浮点型。

    3、指针变量的内容

    d =  a 变量=内存地址;        e = c变量=内存地址;

    *d = a地址中存的数:112; e = c地址中存的数:3.14

     

     4、指针的初始化

    (1)错误的初始化:

     给*p这个变量的地址中重新写入了1这个值,会导致意想不到的危险结果。

    1. int *p; 
    2. *p = 1;

    (2)正确的初始化:

    1. int* p;
    2. int i;
    3. p = &i;
    4. *p = 13;

    指针变量声明后,必须先让它指向一个分配好的地址,再进行读写,这叫做指针变量的初始化。

    (3)为了防止错误的指针初始化,可以如下:

    int* p = NULL;

    5、指针的移动

    1. short* j;
    2. j = (short*)0x1234;
    3. j = j + 1; // 0x1236

             j     的地址是   0x1234

            j+1  的地址是   0x1236,

            因为一个单位的short类型占据两个字节的宽度,所以相当于向高位移动两个字节。

    6、指针与指针的减法

           相同类型的指针允许进行减法运算,返回它们之间的距离,即相隔多少个数据单位。

    1. short* j1;
    2. short* j2;
    3. j1 = (short*)0x1234;
    4. j2 = (short*)0x1236;
    5. ptrdiff_t dist = j2 - j1;
    6. printf("%d\n", dist); // 1

     j1j2是两个指向 short 类型的指针,变量dist是它们之间的距离,类型为ptrdiff_t,值为1,因为相差2个字节正好存放一个 short 类型的值。

    7、指针的加法运算(非法,不可取)

    指针只能与整数值进行加减运算,两个指针进行加法是非法的

    1. unsigned short* j;
    2. unsigned short* k;
    3. x = j + k; // 非法
  • 相关阅读:
    四维轻云平台倾斜模型三种加载方式及单体化操作介绍
    STM32的SPI外设
    一文看懂Hystrix超时机制
    风辞远的科技茶屋:可怖的AI
    如何修复-谷歌浏览器-打开任何一个网页都显示崩溃
    20221129今天的世界发生了什么
    1206. 设计跳表 : 数据结构实现题
    攻防世界-filemanager
    go语言的channel笔记
    GRPC编译安装、各种语言插件及测试
  • 原文地址:https://blog.csdn.net/lurong66/article/details/127039401