您的位置:首页 > 汽车 > 时评 > 阿里网站官网入口_saas系统怎么读_东莞做网站哪个公司好_公司网络推广该怎么做

阿里网站官网入口_saas系统怎么读_东莞做网站哪个公司好_公司网络推广该怎么做

2025/1/7 20:14:29 来源:https://blog.csdn.net/JaneZJW/article/details/144953190  浏览:    关键词:阿里网站官网入口_saas系统怎么读_东莞做网站哪个公司好_公司网络推广该怎么做
阿里网站官网入口_saas系统怎么读_东莞做网站哪个公司好_公司网络推广该怎么做

wx:嵌入式工程师成长日记

https://mp.weixin.qq.com/s/Mk8sodtNrodjD0Jjfo4Txw?token=1728731884&lang=zh_CN

 

1.continue

作用:跳过本次循环体中余下尚未执行的语句,立即进行下一次的循环条件判定,可以理解为仅结束本次循环。(注意:continue语句并没有使整个循环终止)

只能用在循环语句

2.volatile

作用:告诉编译器该变量是容易发生变化的,不能对该变量进行优化,每次取值都必须从内存中取值而不是直接去取之前在寄存器中的值

例:

Volatile int a=20,b,c;b=a;C=a;

代码执行流程如下:

B=a;先从a的内存中取值存放到寄存器,再把寄存器的值给存到b的内存

C=a;把寄存器的值给存到b的内存

可以看出编译器对c=a这步进行优化,不再执行从a的内存中取值,而是直接从寄存器中取值,如果这段时间内a的发生变化,那么c就不能得到最新的值,这个时候就需要使用volatile告诉编译器,不要对变量a优化,每次都是从内存中取a的值

常见场景:

1)多线程使用共享变量:因为多线程是多核操作,同时进行

2)中断:中断程序会修改其他程序中使用的变量

3)硬件寄存器:因为寄存器随时会被修改,好比AD转换的寄存器,随时会因为电压变化而修改

4)外部任务会修改变量

3.Struct

在C和C++中的区别:

1.c语言中结构体是不允许有函数,在c++中可以

2.C语言结构体是不可以继承,c++可以继承

3.C语言中结构体的使用必须要用别名或者使用struct,不能直接使用例如:

Struct  student	{		int age;		int num;		int sex;Typedef struct student student;//必须得别名才可以使用或者struct student student;

4.在c中不可以初始化数据成员,c++可以初始化

4.classstruct的区别?

1)继承权限:class是默认private,struct是public

2)访问权限:class作为对象的实现体,默认是私有访问,而struct是作为数据结构的实现体,是共有访问

3) class可以用于定义模板,而struct不能

5.union

联合体union和结构体struct的区别

对于联合体所有的成员都共享一块内存,而结构体是所有变量内存的叠加,需要考虑字节对齐问题,对于联合体来说,只要你修改里面的成员的数据就会修改其他成员的数据,而结构体的成员数据是不影响的

为了提高内存访问的效率,编译器会对结构体进行对齐对齐的方式按照成员的类型和顺序来进行

内存对齐和补齐:

32位下是4字节对齐,64位下是8字节对齐

图片

图片

计算的时候需要考虑字节对齐问题:

1.所占空间必须是成员变量中字节最大的整数倍

2.每个变量类型的偏移量必须是该变量类型的整数倍

3.对于联合体,由于所有变量都是共用一块内存,还需注意数组占用最大内存

例如:

Typedef union {double I;int k[5];char c;} DATE;

在联合体中成员变量最大为double8个字节,所以最终大小必须是8的整数倍;又因为联合体是共占内存空间,即int*5=20字节,所以最终为24个字节

6.enum

里面的变量会自加

图片

7.#definetypedef的区别

#define是C语言中定义的语法,是预处理指令,在预处理时进行简单而机械的字符串替换,不作正确性检查,只有在编译已被展开的源程序时才会发现可能的错误并报错。

typedef是关键字,在编译时处理,有类型检查功能。它在自己的作用域内给一个已经存在的类型一个别名,但不能在一个函数定义里面使用typedef。用typedef定义数组、指针、结构等类型会带来很大的方便,不仅使程序书写简单,也使意义明确,增强可读性。

#define myptr int* p	myptr a,b;//a是int * a,    b是 int b	typedef  int*  myptr;	myptr a,b;//a是int * a,    b是 int* b

8.const

1.定义变量,表示该变量是个常量,不允许修改

例如:const int a=100;

错误:a=200;

2.修饰函数参数,表示函数体内不能修改该参数的值

3.修饰函数的返回值 const char getstr()

4.const修饰的常见:

Const int a;int const a;是一样的都是修饰变量a为常量

Const * int a ; int const *a ; 修饰的是这个指针指向的内容不允许修改,这个指针的地址可以改变 常量指针

Int * Const a; 修饰的指针,表示这个指针的地址不可以修改,地址的内容可以修改 指针常量

Const int * const a;表示指针的地址不可以修改,内容也不可以修改

5.const修饰函数在c++的类中是不能Virtua虚函数

6.const n = 3;

假设 const n = 3;

Int num[n] ={1,2,3}

问是否正确?

错误:在c语言中n并不是真正意义上的常量,它还是变量,对于数组来说必须要开辟一个准确的数组大小,C++中是可以编译过去。

    int n = 3;

    int num[n] = {1,2,3};//这样也是错误的,数组必须是确定的

注意:如果数组不初始化是没有报错的

int n = 3;

   int num[n];

在写代码的时候如果想要定义个常量最好是使用#define 而不要使用const

9.const 修饰的变量存放位置

对于const修饰的局部变量:存放在栈中,代码结束就会释放,在C语言中可以通过指针修改里面的值

对于const修饰的全局变量(已初始化的)存放在只读数据段,不可以通过指针修改里面的值,未出示化的存放在.bss

9.extern

1.声明外部变量:(保存在数据段)

如果想要定义一个变量被其他文件使用,即定义一个全局变量,这个变量不能定义在头文件里面,然后在需要调用该变量的.c文件里面extern声明该变量是不可以的,编译器会报错:multiple define 多个定义,

正确做法如下:

main.c文件里面定义变量int globe为全局变量,

fun.c文件里面extern int goble;即可 

该作用主要是告诉编译器我在其他文件定义了变量a,并且分配了空间,不再为该变量申请空间

2.Extern “C”

该做用是实现在c++中调用c语言代码,告诉编译器这部分代码要是有C编译

10.register

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

11.static

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

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

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

 

 wx:嵌入式工程师成长日记

https://mp.weixin.qq.com/s/Mk8sodtNrodjD0Jjfo4Txw?token=1728731884&lang=zh_CN

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com