首页 > 其他分享 >计组学习02——C and Pointers

计组学习02——C and Pointers

时间:2022-12-14 13:24:11浏览次数:48  
标签:02 计组 指向 ++ Pointers 元素 union 数组 指针

计组学习 —— 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

标签:02,计组,指向,++,Pointers,元素,union,数组,指针
From: https://www.cnblogs.com/ZzTzZ/p/16981786.html

相关文章

  • 【2022-12-12】家庭分工
    20:00你要整个生活是始终如一——但事实绝不是这样。你轻视公务,因为你希望工作永远和目的完全相符——而事实绝不是这样。你还要每个人的活动都有明确的目的,恋爱和家庭生......
  • 【2022-12-11】连岳摘抄
    23:59水在浑浊时,道理也很清楚,只要一直坚持向低处流,就没有走不出的困境。                              ......
  • 2022-12-14 #12 墙角折枝不认命的枝桠 深灰色沙土中书写描画
    确实。67P5163WD与地图/Ptz2018Day8YuhaoDuContest5L一个经典的内核包装了几层。gym题与这道题内核类似,就只说P5163的做法了。时光倒流变成加边,我们事实......
  • Wallys|wifi6 Qualcomm IPQ8072A 4T4R support QCN9074/QCN6024 MOUDLE OPENWRT 802.1
    DR8072V01NetworkSBCbasedonQualcommIPQ8072Acommunicationprocessorwithtwo10GbEinterfaces.OneoftheseinterfacesisimplementedthroughanSFPracka......
  • 编译原理基础知识02
    1、文法:用来描述表达式的规则2、上下文无关文法(四个要素组成)①一个终结符号集(或者叫词法单元)②一个非终结符号集(或者叫语法变量)③一个产生式集合:就是由非终结符到终结......
  • DTCC2022预告 | 玖章算术叶正盛:程序员必须掌握的数据库原理
    12月15日,玖章算术CEO叶正盛受邀将参加第13届中国数据库技术大会(DTCC2022),带来《程序员必须掌握的数据库原理》的主题演讲,将于15日下午16点50在「云原生数据库场开发与实践......
  • 002 Typora 的使用(markdown 的使用)
    工欲善其事,必先利其器(得有个东西去记录他)用word、有道云笔记用程序猿专用Makrdown文本(.md)--》可以直接和h5代码无缝连接红色字体一般大型it项目都会有一个README.md......
  • 2022/12 做题记录 #2
    2022/12/14P5743【深基7.习8】猴子吃桃https://www.luogu.com.cn/problem/P5743循环内是\(i<n\)。#include<bits/stdc++.h>usingnamespacestd;intmain(){ int......
  • 2022-12-14 Excel中图片的批量提取
    Excel中图片的批量提取:全选原表中的所有内容,复制。在桌面新建一个Excel文件,把复制的内容粘贴到文件中,保存并关闭。将新建的Excel文件右键【重命名】,后缀名改为.zip然......
  • 2022.12.13 总结
    2022.12.13总结​ 今天买的屏幕到了,初步把工作台搭建好了1.《代码随想录》二刷全排列:https://leetcode.cn/problems/permutations/全排列II:https://leetcode.cn/pro......