- 博客(13)
- 收藏
- 关注
原创 【C语言】指针与数组
先来看看下面这个表达式p存放的地址实际上是字符串中首字符的地址,而不是整个字符串的指针。若打印结果显示为 a这就证明了这个理论。上述例子的"abcdef"是一个常量字符串,不能进行任何改变则编译器则会报错,程序会崩溃,这是因为常量字符串放在内存中的常量区,是不能被修改的,为了保护常量字符串不被修改,则需要使用const 修饰符对其进行保护防止被写入赋值给字符指针和字符数组的区别来看看以下例子结果打印:p1==p2arr1!=arr2。
2023-03-19 19:07:45
295
原创 传值调用和传址调用
值掉用指的是将实参的值拷贝一份至函数中的形参,形参和实参的值是一样的,但是在内存中分别在不同的内存地址中,在调用函数执行的过程中会建立一个和实参类型、值一样的变量,执行完后拷贝返回值到返回结果中,其他在函数中创建的栈中的变量都会被销毁。
2023-03-19 18:49:23
184
原创 结构体中的内存对齐
CPU 寻址存在一定的时间消耗,CPU 访问内存时并不是逐个字节访问的,而是以字长为单位访问的,若没有内存对齐则会出现结构体成员变量需要多次访问才能读取变量的问题,使用内存对齐是一种牺牲空间换取时间的方法。按照以上的对齐规则,成员变量最大的大小为6,所以该共用体的大小至少为6,而其最大对齐数为4,要共用体大小需要对齐到最大对齐数的整数倍,则大小应该为8。结构体的大小并不是结构体所有成员变量的大小的总和,而是一般大于这个总和的值,造成这种现象的原因是结构体的内存对齐。
2023-03-19 18:45:11
155
原创 C语言中的数据存储
原码、反码、补码的概念只对负数有效,因为正数的原反补码相同。原码指的就是一个整数使用二进制表示的数字a 的值a = -18;此时 a 的原码就是1000 0000 0001 0010反码指的是在保持符号位不变,其他位数取反a 的值a = -18;此时 a 的反码是1111 1111 1110 1101补码在反码的基础上+1a 的值a = -18;此时 a 的补码是1111 1111 1110 1110。
2023-03-19 18:44:31
210
转载 C语言中的整型溢出
整型溢出指的是整型变量在进行赋值或者运算时,得到的结果超过了其取值范围从而发生截断,导致结果和预期不符的现象整型溢出也分为无符号和有符号的溢出或者可以分为上溢出overflow或者下溢出underflow对于unsigned整型溢出,C的规范是有定义的,“溢出后的数会以2^(8*sizeof(type))作模运算”,也就是说,如果一个unsigned char(1字符,8bits)溢出了,会把溢出的值与256求模上面的代码会输出:0 (因为0xff + 1是256,与2^8求模后就是0)
2023-03-19 18:38:25
1516
原创 【C语言】动态分配内存
动态内存申请malloc后的首指针,必须保存下来给留给后续的free函数使用,指针若使用++或者--等后free错误则会报错。free的入参若是指向已经释放的内存指针,在C标准中是未定义的行为,所以释放后最好将指针置为NULL;malloc后,若不使用必须要进行释放,如果没有进行释放大量申请的动态空间堆积会导致内存泄漏。与栈区开辟的局部变量一样,若访问内容不在申请的空间内,则会造成越界的后果。若再次释放,则入参为空指针,free(NULL)则什么都不会做。free函数的入参只能是指向动态分配内存的指针。
2023-03-19 18:30:16
286
原创 sizeof()运算符
结果为:(64位系统下)844791.0为double型浮点数,5.20f为float型浮点数,所以结果分别为8、4'g'为字符型,但是在运算时会进行整型提升提升至int类型,所以计算结果是4"abcdef"为字符串,传入运算符中的是字符串地址,可以看做为字符数组,所以计算结果为数组的长度即为7sizeof()在计算常量字符串的大小时,无论字符串中有多少\0,都会计算其大小,并在最后默认存在一个隐藏的结束符'\0',无论这个结束符前有多少'\0'。
2023-03-19 18:25:23
429
原创 C语言中的类型转换
C语言不同于pascal语言,在不同类型相互赋值时有一定可能进行自动类型转换。C语言中按照类型级别从大到小排序为doublefloatlong longlongint当涉及多种不同类型的混合运算时,编译器会自动转换类型,变量都会升级至参与运算中所有数据类型的最高级别的类型。比如说char、int、double的类型在进行运算时都会升级到double类型。举个例子:若存在以下的变量在以下对变量s赋值的过程中升级还是降级的过程中都不会导致变量的数据类型进行改变,而是赋值给一个。
2023-03-19 18:15:22
280
原创 【C语言】三子棋
三子棋的编码考验的主要是数组的应用,在一个3 x 3的九宫格中进行博弈,只要一方在棋盘下满的情况之前棋子三连即可胜利,本文不针对数组以及操作符做讲解,主要根据在编码结构以及思想上进行详解。
2023-03-19 16:36:13
87
原创 【C语言】数组
1、一维数组数组创建定义:数组是一组相同数据类型的的集合数组的创建方式:type_t arr_name [const_n];//type_t 是指数组的元素类型//const_n 是一个常量表达式,用来指定数组的大小创建实例://代码1int arr1[10];//代码2int count = 10;int arr2[count];// C99标准的时候,数组可以正常创建//代码3char arr3[10];float arr4[..
2022-05-22 13:04:49
519
原创 【C语言】函数
1、函数的定义在计算机科学中,子程序(英语:Subroutine, procedure, function, routine, method, subprogram, callable unit),是一个大型程序中的某部分代码, 由一个或多个语句块组 成。它负责完成某项特定任务,而且相较于其他代 码,具备相对的独立性。 一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软件库。2、函数的分类1、库函数2、自定义函数库函数库函数的查询工具www.c
2022-05-03 17:02:59
182
原创 【c语言】分支语句和循环语句
1、语句的定义C语言的语句可以分为以下几类1. 表达式语句 2. 函数调用语句 3. 控制语句 4. 复合语句 5. 空语句函数调用语句如printf(“Hello world.”);表达式语句如赋值表达式a=3;,++i;等空语句直接只有一个分号的一行语句。复合语句用{}将语句和声明括起来的复合语句,也称语句块控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语 言有九种控制语句。 可分成以下三类:1. 条件判断语句...
2022-05-03 14:48:34
478
原创 【C语言】初识C语言
1、C语言定义C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。...
2022-04-10 15:06:27
1615
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅