代码随想录 + 嵌入式八股文 (3)

一、关键字

1.Register

           存在寄存器里面,即cpu,该值不能取地址操作,并且是整数,不能是浮点数

2.Static  (c语言:变量、函数       C++:类中变量、类中静态成员函数)

        (1)定义变量

        静态全局变量 ---->        作用域只能作用域本文件,每次函数调用该变量都会被初始化

        静态局部变量----->        生命周期不会随函数结束结束,直到程序结束,但是在函数外面不能使用该变量,只能在函数中使用,该变量是有记忆的,会记住上次的值,。该变量只被初始化一次

       对于这两种变量来说,如果初始化的会在数据段未初始化的在.bss段或者初始化为0,这两种变量都会在程序结束才会释放,只不过作用域不同,静态局部变量只限定于函数中,但是该函数结束,该变量并没有被干掉,静态全局变量限定于本文件中

没有使用 static 变量:

 可以看出打印的都是11,说明每次函数结束变量a就结束生命周期,这就是局部变量

有使用 static 变量:

        可以看出static修饰的局部变量是不会随函数结束而结束,是保留记忆的,但是该变量只能在该函数中使用,虽然它存在,但是别人不能使用,因为他毕竟是局部变量,限定了作用域

        静态局部变量和静态全局变量的区别:静态全局变量和全局变量差不多,可以被初始化,也有记忆,但是却被限定了只能在本文件中

         (2)定义函数

        在函数返回类型前加上static关键字,函数即被定义为静态函数。静态函数只能在本源文件中使用;也就是说在其他源文件中可以定义和自己名字一样的函数(即函数加Static 限制了函数只能在本文件使用)

        (3)定义类中的静态成员变量(不能在类里面初始化,不占类内存空间,必须定义才能使用)

        在类中的静态成员变量它即可以被当做全局变量那样存储,但又被隐藏与类中,类中的静态成员变量拥有一块独立的储存空间,不会占用类中的空间,所有的对象都共享该静态成员,也就是说,只要有对象改变了这个值,那么其他对象就会受影响,该数据可以使用this,也可以类中其他函数访问

        注意:静态数据成员不能在类中初始化在类中只是声明,而不是定义,静态数据必须要定义之后才能使用实际上类定义只是在描述对象的蓝图,在其中指定初值是不允许的。也不能在类的构造函数中初始化该成员,因为静态数据成员为类的各个对象共享,否则每次创建一个类的对象则静态数据成员都要被重新初始化

        (4)定义类内的静态成员函数(只能访问静态成员变量)

        静态成员函数也是类的一部分,而不是对象的一部分。所有这些对象的静态数据成员都共享这一块静态存储空间

        注意:静态成员函数不属于任何一个对象,因此C++规定静态成员函数没有this指针(划重点,面试题常考)。既然它没有指向某一对象,也就无法对一个对象中的非静态成员进行访问,即不能在静态函数里面使用this指针

3.Switch-case

   注意:

           1.switch里面不能是浮点数double,可以是表达式,但是结果不能是浮点数或double

           2.要注意 case语句后面是否有break,如果没有,就会从找到的case语句一直执行到停止

           3.case不能是”shshj”,可以是‘s’因为字符最终也是整数,变量表达式也不行,反正这个东西必须是能确定的

4.Do-while

          先do,再while判断是否符合while里面的条件

5.Sizeof

        1).Sizeof()和strlen()的区别

       首先sizeof是关键字,strlen是函数,sizeof用来计算占用内存大小,strlen是用来计算字符串的长度,   特别是对于需不需要包含\0问题:

 Sizeof是需要给 '\0' 计算空间的,strlen是不需要,

sizeof是在编译的时候计算的,而strlen是在运行的时候计算

        2).求指针大小        

在32位机器下,对于sizeof(指针变量)都是4个字节,比如 Int *a;   Sizeof(a);

 引申:求引用大小          Sizeof(char &) //1  引用大小和数据类型有关

        3).计算数组大小

sizeof 计算的是数组的大小,即数据类型 *[ ]

strlen 计算的是字符串的长度

int num[5]={1,2,3,4};

printf("%ld\n",sizeof(num));        //20

char str[10]={"hello"};

printf("%ld\n",strlen(str));        //5

printf("%ld\n",sizeof(str));        //10

        4)如何不使用sizeof求数据类型字节的大小

        #define         mysieof(value)          (char*)(&value+1)-(char*)(&value)

        5).strlen('\0') =? sizeof('\0')

printf("%d\n",sizeof( "\0" ));        //2 因为这里有\0\0

printf("%d\n",strlen( "\0" ));       //0

printf("%d\n",sizeof( '\0' ));        //4

printf("%d\n",strlen( '\0' ));        //报错

        6).sizeof(a++)

 int a = 2;

printf("%d\n",sizeof(a++));         // 4

printf("%d\n",a);                        //  a = 2

注意:对于sizeof只会求所占内存大小,不会进行表达式运算

        7).计算字符数组大小

char ch[]  = "hello";

char str[10] = {'h','e','l','l','o'};

printf("%d\n",sizeof(ch));//6

printf("%d\n",strlen(ch));//5

printf("%d\n",sizeof(str));//10

printf("%d\n",strlen(str));//5

        8).sizeof(void)        会出错或者为 1

6.New/malloc delete/free        (指明大小,返回值,初始化) 

    1.首先new/delete是运算符,而malloc和free是函数

    2.new先为对象申请内存空间,让后再调用构造函数进行初始化,同理delete可以调用析构函数释放内存,而 malloc只是申请内存空间并不能调用构造函数进行初始化,同理free也只是释放内存

    3.malloc的返回值需要强转为自己申请的内存指针,而new不需要

    4.malloc需要指定申请内存的内存大小

二、代码随想录        

      引入滑动串口  

1. 长度最小的子数组

给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。

         所谓滑动窗口,就是不断的调节子序列的起始位置和终止位置,从而得出我们要想的结果

在暴力解法中,是一个for循环滑动窗口的起始位置,一个for循环为滑动窗口的终止位置,用两个for循环 完成了一个不断搜索区间的过程。

        那么滑动窗口如何用一个for循环来完成这个操作呢。

首先要思考 如果用一个for循环,那么应该表示 滑动窗口的起始位置,还是终止位置。如果只用一个for循环来表示 滑动窗口的起始位置,那么如何遍历剩下的终止位置?此时难免再次陷入 暴力解法的怪圈。所以 只用一个for循环,那么这个循环的索引,一定是表示 滑动窗口的终止位置。

        那么问题来了, 滑动窗口的起始位置如何移动呢?

        其实滑动窗口也可以理解为双指针法的一种!只不过这种解法更像是一个窗口的移动,所以叫做滑动窗口更适合一些。

  • 窗口内是什么?
  • 如何移动窗口的起始位置?
  • 如何移动窗口的结束位置?

窗口就是 满足其和 ≥ s 的长度最小的 连续 子数组。

窗口的起始位置如何移动:如果当前窗口的值大于s了,窗口就要向前移动了(也就是该缩小了)。

窗口的结束位置如何移动:窗口的结束位置就是遍历数组的指针      

相关题目推荐

904. 水果成篮        难度中等

模拟题:

        模拟类的题目在数组中很常见,不涉及到什么算法,就是单纯的模拟,

59. 螺旋矩阵 II        难度        中等

给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。

54. 螺旋矩阵        难度中等

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

6. N 字形变换        难度        中等

 

总结

数组是存放在连续内存空间上的相同类型数据的集合。

数组可以方便的通过下标索引的方式获取到下标下对应的数据。

  • 数组下标都是从0开始的。
  • 数组内存空间的地址是连续的

正是因为数组的在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要移动其他元素的地址。

数组的元素是不能删的,只能覆盖。

二分法

双指针法

滑动窗口

模拟行为

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值