计组学习02——C and Pointers

计组学习 —— C and Pointers

由于已经比较熟悉C了,上课时跳过了许多已经熟知的部分,只记录自己不太熟的地方。

Unions in C

  • 定义

    和struct基本一样

    union foo{
        int i;
        char c;
        double k;
    };
    

    union表示几个变量共用一个内存位置,在不同的时间保存不同的数据类型和不同长度的变量。在union中,所有的共用体成员共用一个空间,并且同一时间只能存储其中一个成员变量的值。

    union只为单个最大元素存储数据,然后它会映射所有数据到相同的空间

  • 编译声明

    在一个union被声明时,编译程序自动地产生一个变量,长度为union中“占位最大”的元素的占位大小的整数倍

    例如,union内有一个char s[10],一个int b,那么foo的内存空间长度为12,因为int类型是4,采取4的三倍。

    而如果是一个char s[10],一个double b,那么长度为16,因为double类型长度为8,采取8的二倍

C More Pointer

关于指针的绑定与解绑

首先明确概念,后缀自增的结合性是从左往右的,优先级很高,为2,括号的优先级也为2,前缀自增的结合性是从右往左的,优先级略低,为3,而取值运算符*和取地址运算符&都是优先级为3的运算符,结合性也都是从右向左的,赋值语句优先级为16,比绑定还在之后计算

一句话概括:如果使用前缀形式,则会在表达式计算之前完成自增或自减,如果使用后缀形式,则会在表达式计算之后完成自增或自减。

  • *--p

    首先看到运算符都是优先级为3的,那么从右往左,首先p,之后p的值和--运算符绑定,数值减1,最后再被解绑。

    如果p是一个指针,那么我们此时取到了某个数组的前一个元素的值

  • ++*p

    优先级都是为3的,还是从右往左,先对p进行取消引用,取得了指针p指向的值,接下来++和这个值绑定,立即执行

    如果p是一个指针,那么我们做到了让某个数组的某一个元素的值+1

  • *p++

    首先看到了后缀自增,我们将++和p进行绑定,接下来处理*p。由于后缀自增最后生效,所以我们此时返回的值为*p,接下来p的值+1

    如果p是一个指针,那么我们做到了获取这个指针指向的元素的值,并且我们让指针指向了数组的下一个元素

  • char c = *p++ ; c=*p;

    根据上述原理,如果p最开始指向了数组的第0个元素,之后我们返回了一个*p,c的值为数组的第0个元素,之后指针指向了数组的第1个元素。然后接下来执行第二句话,c的值变成数组第一个元素

  • char c =(*p)++;c=*p;

    根据上述原理,++此时和()绑定,同理第一句话返回的仍然是*p,c的值为数组的第0个元素,接下来我们++使得数组的第0个元素+1。接下来执行第二句话,c的值变成了数组第0个元素+1.

二级指针:

  • 例题:

    int x[]={2,4,6,8,10};
    int *p=x;
    int **pp = &p;
    (*pp)++;
    (*(*pp))++;
    printf("%d\n",*p);
    

    首先,p指向数组x的第一个元素的地址,pp指向指针p的地址,接下来使用*获取指针pp指向的元素的值,并且让这个值+1,那么也就是p的值+1。(*PP)++这句话等同于p++

    p的值表示了x第一个元素的地址,此时p值+1,也就是p指向了x的第二个元素的地址,此时p指向4。

    接下来执行(*(*pp))++,同理,此时取值到4,让4++,变成了5,最后输出p指向的元素的值,也就是5


扯点没用的,感觉cs61c讲指针这部分的女老师好漂亮,于是本来还算挺会的指针,就再学了一遍(bushi
(放张漂亮姐姐的截图~)
image

好喜欢,好喜欢...(擦口水)...
刚好是戳到我的长相呢

莫名发现,自从使用markdown了之后,闲扯都变少了好多,主要是排版没有之前那么自由凌乱。
这个假期每天在家呆着,睡醒了心情好就挂个课,有空余的时间就控制自己不去打游戏,去看美女姐姐学习,然后也在学着多变点花样做饭做菜,有在好好生活呢!
感觉再下一个阶段就是开始看番,重回二次元了

image

posted @   ZzTzZ  阅读(50)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示