c语言

【C语言】malloc和realloc的区别以及使用

妖精的绣舞 提交于 2020-03-01 02:45:13
ANSI C说明了三个用于存储空间动态分配的函数 (1) malloc分配指定字节数的存储区。此存储区中的初始值不确定 (2) calloc为指定长度的对象,分配能容纳其指定个数的存储空间。该空间中的每一位(bit)都初始化为0 (3) realloc 更改以前分配区的长度(增加或减少)。当增加长度时,可能需将以前分配区的内容移到另一个足够大的区域,而新增区域内的初始值则不确定 .分配函数时再分配 realloc() 使我们可以增、减以前分配区的长度(最常见的用法是增加该区)。 如果先分配一个可容纳长度为512的数组的空间,并在运行时填充它,但又发现空间不够,则可调用realloc扩充该存储空间。 如果在该存储区后有足够的空间可供扩充,则可在原存储区位置上向高地址方向扩充,并返回传送给它的同样的指针值。 如果在原存储区后没有足够的空间,则realloc分配另一个足够大的存储区,将现存的5 1 2个元素数组的内容复制到新分配的存储区。 因为这种存储区可能会移动位置,所以不应当使用任何指针指在该区中。 注意,realloc的最后一个参数是存储区的newsize(新长度),不是新、旧长度之差。作为一个特例,若ptr是一个空指针,则realloc的功能与malloc相同,用于分配一个指定长度newsize的存储区。 这些分配例程通常通过sbrk(2)系统调用实现。该系统调用扩充(或缩小

c语言数字转字符串

落花浮王杯 提交于 2020-03-01 01:43:13
对下面代码的一些细节,解释下为什么那么做。 1. char buf[sizeof(int) * 8 + 1] = ""; 这个buf的作用是缓存中间结果,长度没有写死。好处是不同的平台上这段代码都可以执行。 2. if (base < 2 || base > 36) 该判断检查用户传入的进制数是否合法。base < 2 主要过滤负数和0和1。base > 36的意义是在超过10进制的数里,是用字母a表示10的。以此类推z可以表示36。在只使用ascii字符表示大于10的数时,最大的表示值是36,超过这个值就不能表示。 3. uval = -val; 这各写法可以避免一个潜在的坑。当val为int值为INT_MIN时 -val会溢出。表象为-val 的值还是INT_MIN,还是个负数 4.至于为什么用一个无符号整数与一个>0的int进行整除与取余 uval % base uval /= base 因为c语言的标准里没有规定x / y当有一个值为负数时,结果该向x坐标轴的左侧靠近(向0取整) 还是向侧靠近(负无穷) 它只规定了 (x / y) * y + (x % y) = x -14 /5 的结果可以是 -2 或者 -3 至为正数为啥没有两个结果。本人只是用了几个值进行了验证。。 好了贴代码: #include <stdio.h> #include <limits.h>

C语言学习(3reverse倒置)

有些话、适合烂在心里 提交于 2020-02-29 19:45:12
使用函数对字符串进行倒置。 # include <stdio.h> # include <string.h> void swap ( char * a , char * b ) { char c ; c = * a ; * a = * b ; * b = c ; } void reverse ( char * str ) { int i = 0 , L = strlen ( str ) ; for ( i = 0 ; i < int ( L / 2 ) ; i ++ ) { swap ( & str [ i ] , & str [ L - i - 1 ] ) ; //在交换数组元素时,使用swap1(a+i, a+j)或者swap1(&a[i], &a[j]); } } void main ( ) { char str [ 501 ] ; while ( scanf ( "%s" , str ) != EOF ) { reverse ( str ) ; printf ( "%s" , str ) ; } } 来源: CSDN 作者: qq_36979673 链接: https://blog.csdn.net/qq_36979673/article/details/104574591

C语言I博客作业09

半世苍凉 提交于 2020-02-29 19:42:01
这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-4/homework/10030 我在这个课程的目标是 学习并熟练C语言的语法以及其函数 这个作业在那个具体方面帮助我实现目标 让我更加了解break,continue的熟悉以及循环结构嵌套的使用 参考文献 https://www.cnblogs.com/linfangnan/p/11682033.html 一.PTA实验作业 1.1换硬币 题目内容描述:将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法? 输入格式: 输入在一行中给出待换的零钱数额x∈(8,100)。 输出格式: 要求按5分、2分和1分硬币的数量依次从大到小的顺序,输出各种换法。每行输出一种换法,格式为:“fen5:5分硬币数量, fen2:2分硬币数量, fen1:1分硬币数量, total:硬币总数量”。最后一行输出“count = 换法个数”。 输入样例: 13 输出样例: fen5:2, fen2:1, fen1:1, total:4 fen5:1, fen2:3, fen1:2, total:6 fen5:1, fen2:2, fen1:4, total:7 fen5:1, fen2:1, fen1:6, total:8

笔记:Linux环境C语言复习(1)//C语言编译过程

浪尽此生 提交于 2020-02-29 19:34:10
目前对C语言感性的理解:C语言,就是一门语言,和英语、日语一样。本科时候学过谭浩强的红皮书,那是一本语法书,和中学的英文语法书没有太大的区别,规定一系列的约定俗成的规范(复数名词后要加s;定义整型变量前面要用int修饰),就是强行记忆,没有什么捷径。语法很重要,学会语法是进入这个语系世界的钥匙。但是,学会语法和学会语言是两件事情。我和刘慈欣都熟练掌握中文语法,但是他能写《三体》获得雨果奖,而我写个开题报告都要被导师骂一顿(苦笑)。语言能力的高低,最终还是体现在思维的深度和广度,语法不过是一种人机的通讯协议。自知能力有限,不敢谈C语言,只是总结一些C语言语法和原理以供日后复习。 C语言编译过程 在Linux环境下,我们编译一个.c文件一般直接使用gcc编译器执行“gcc 文件名.c” 就可以获取二进制可执行文件a.out,其实编译器帮我们完成了很多任务。以编译unicorn.c文件为例,gcc编译器实际编译生成二进制可执行文件的过程如下: 1)gcc -E unicorn.c -o unicorn.i //编译器执行与处理指令 2)gcc -S unicorn.i -o unicorn.s //编译器对预处理文件进行编译,生成汇编文件 3)gcc -c unicorn.s -o unicorn.o //编译器对汇编文件进行汇编,生成二进制文件 //通常第二、三步可统一为一步称为编译

嵌入式从入门到精通的学习攻略

好久不见. 提交于 2020-02-29 19:30:41
近几年,嵌入式系统产品渐渐完善,并在全世界各行业得到广泛应用。2004年,全球嵌入式系统产品的产值已达2000亿美元,国内嵌入式软件的产值也达到600亿人民币。据预测,随着Internet的迅速发展和廉价微处理器的出现,嵌入式系统将在日常生活里形成更大的应用领域。 嵌入式软件工程师学习路线推荐: 一、嵌入式软件编程的基础 这一阶段重点打好嵌入式软件编程的基础,包括学习Linux系统的基本应用,Linux的常用命令、C语言编程基础、常用的数据结构。 特别是C语言中对指针的理解和应用。信盈达小编告诉你这一阶段的主要目的是学习编程语言、开发环境、和培养自己的编程思维,为进一步学习嵌入式开发打下良好的基础。 必学内容有:Linux Ubuntu操作系统安装、使用、Linux常用命令、samba服务器、SSH远程登录GCC编译器、GDB调试器、VI编辑器。 1、嵌入式C语言高级编程 2、C数据类型、控制语句 3、C程序结构设计、数组、函数、预处理: 4、指针及字符串操作 5、结构体、共用体、宏、枚举 6、文件I/O操作 嵌入式中物联网开发学习 1、了解物联网、泛在网、互联网基本要领及其关系 2、熟悉RFID从低频段到高频段的基本工作原理,以及RFID标签的种类与行业应用,读卡器原理与通信过程 3、熟悉TI的cc2530的基本应用,包含基本硬件资源,协议栈相关接口使用,以及点对点通信、星形通信

C语言经典编程实例(六)

橙三吉。 提交于 2020-02-29 17:41:40
文章目录 一、C语言基础  1.判断三角形的类型  2.矩阵转置  3.求自然底数e  4.回文素数  5.圆周率π  6.完全数  7.亲密数  8.自守数  9.回文数  10.勾股数 使用C++语言解决C语言常见重点、要点问题 一、C语言基础  1.判断三角形的类型   根据输入的三角形的三条边判断三角形的类型,并输出其面积和类型。 首先处理输入数据的合法性,即若两边之和大于第三边即可考虑下一步操作,若小于则不能构成三角形,之后利用海伦公式计算面积并判断其类型。判断类型时若三边相等则为等边三角形,若两边相等则为等腰三角形,若两边的平方和等于第三边的平方和则为直角三角形,否则为普通三角形。 int main ( ) { float l = 0 , w = 0 , h = 0 ; float aver = 0 , area = 0.0 ; cout << "Please enter the three sides of the triangle: " ; cin >> l >> w >> h ; if ( l + w > h && l + h >= w && h + w > l ) { aver = ( l + w + h ) / 2 ; area = ( float ) sqrt ( aver * ( aver - l ) * ( aver - w ) * ( aver - h

C语言自学《一》 ---- 初探C语言

删除回忆录丶 提交于 2020-02-29 13:34:37
初步了解C语言 C语言 C语言是一种功能强大、简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务等等 C语言标准 C语言由一个国际标准定义,目前最新的标准为C11,由于C11标准定义的一些语言元素是可选的,所以有些编译器并没有实现该标准的全部功能, C11标准英文说明文档 C语言标准库 标准库定义了编写C程序时常常需要的常量、符号和函数,还提供了大多程序员可都可能需要的功能,例如字符串处理或数字计算等等,还提供了基本C语言的一些可选扩展 头文件 头文件指定了C标准库在一系列标准文件,例如<stdio.h>定义了用于输入输出的宏和函数,从键盘上读取数据,将输出写入命令行时,需要包含该头文件 用C语言写经典的HelloWorld程序 <!-- lang: cpp --> #include <stdio.h> //标准头文件,使用输入输出函数如printf()时需要它 #define INCHES_PER_FOOT 12 //宏可以提供给预处理器的指令,来添加或修改程序中的C语句 /* 每个C程序总是从main函数体开始执行 */ int main(void){ printf("Hello,World!!\n"); //printf()是一个标准的库函数,它将函数名后面引号内的信息输出到命令行上 printf("%d\n",INCHES_PER_FOOT); return 0

Linux简介

六月ゝ 毕业季﹏ 提交于 2020-02-29 13:30:55
国内常用 Linux是从Unix演化而来的 B语言、c语言创始人、Linux之父 c语言之父 70年代----贝尔实验室 ken用b语言做了一个Unix 71年两个人创建了c语言 73年用c写了Unix 80年代的太贵了 是个黑客。还提出gnu计划(软件自由) 人机互动 人操作软件》发出命令给shell层(解释层)》操作系统收到命令(Linux就在这里)》控制硬件 来源: https://www.cnblogs.com/rijiyuelei/p/12382384.html

C语言 运算符优先级

一个人想着一个人 提交于 2020-02-29 12:12:23
优先级 运算符 名称或含义 使用形式 结合方向 说明 1 后置++    后置自增运算符 变量名++ 左到右   后置--    后置自减运算符 变量名--       [ ] 数组下标 数组名[整型表达式]    ( ) 圆括号 (表达式)/函数名(形参表)   . 成员选择(对象) 对象.成员名   -> 成员选择(指针) 对象指针->成员名   2 - 负号运算符 -表达式 右到左 单目运算符 (类型) 强制类型转换 (数据类型)表达式   前置++ 前置自增运算符 ++变量名 单目运算符 前置-- 前置自减运算符 --变量名 单目运算符 * 取值运算符 *指针表达式 单目运算符 & 取地址运算符 &左值表达式 单目运算符 ! 逻辑非运算符 !表达式 单目运算符 ~ 按位取反运算符 ~表达式 单目运算符 sizeof 长度运算符 sizeof 表达式/sizeof(类型)   3 / 除 表达式/表达式 左到右 双目运算符 * 乘 表达式*表达式 双目运算符 % 余数(取模) 整型表达式%整型表达式 双目运算符 4 + 加 表达式+表达式 左到右 双目运算符 - 减 表达式-表达式 双目运算符 5 << 左移 表达式<<表达式 左到右 双目运算符 >> 右移 表达式>>表达式 双目运算符 6 > 大于 表达式>表达式 左到右 双目运算符 >= 大于等于 表达式>=表达式