当前位置: 首页 > news >正文

嵌入式c学习第十天

malloc函数与calloc函数区别

1、参数:malloc只有一个参数,calloc有两个参数

2、堆内存里的数据:malloc申请的堆内存数据未初始化,calloc申请的堆内存数据已初始化

const常量关键字:英文constant的缩写,表示常量。在c语言中一般用于修饰变量,可以降低变量的访问权限,把变量变成只读如:

int a = 10;//变量a是可以可读可写的,const  int b = 20  //变量b是只读变量

利用变量来存储一个常量,需要在定义的时候用const关键字修饰,且必须要完成初始化!

const 修饰指针变量

int * const p:指针常量,const直接修饰指针变量p,表示p的值不能改变,即p指向的地址不能改变

const int *p == int const * p:常量指针,const修饰指针p所指向的地址,表示此地址下的此数据只有在使用*p间接访问时才不能修改

const int *const p:表示指针变量p的值不能改变,且p所指向的地址下面的数据在使用*p访问时也不能改变

递归函数:

1、设计递归函数求1*2*3*.....n;

#include <stdio.h>

int mul(int n)
{
	//结束条件
	if(1 == n){
		return n;
	} 
	
	//调用自身
	return mul(n-1) * n;
}

int main()
{
	int n =5;
	printf("1-%d的积为:%d\n", n, mul(n));
    return 0; 
}

2、输入字符串,使用递归函数实现字符串逆序输出

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

bool osr(char *p)
{
	//结束条件
	if('\0' == *p){
		return false;
	} 
	
	//调用自身
	osr(p+1);
	printf("%c", *p); 

}

int main()
{
	//定义指针变量指向NULL 
	char *p = NULL; 
	
	//通过calloc申请堆内存,用指针变量接收返回的堆内存的首地址,用于存储用户输入的字符串
	p = (char *)calloc(1,100);
	
	//确认申请堆内存是否成功,错误处理 
	if(NULL == p){
		perror("堆内存申请异常");
		return -1;   //程序异常退出 
	} 
	
	//提示用户输入字符串,接收字符串 
	printf("please input string:");
	scanf("%s", p);
	
	//调用递归函数
	osr(p);
	
	//使用完成释放堆内存,同时让指针再次指向NULL 
	free(p);
	p = NULL; 
    return 0; 
}

3、通过scanf输入字符串,计算字符串的实际长度

#include <stdio.h>
#include <stdlib.h>

int stl(char *p)
{
	//结束条件
	if('\0' == *p){
		return 0;
	} 
	
	//调用自身
	return stl(p+1) + 1;

}

int main()
{
	//定义指针变量指向NULL 
	char *p = NULL; 
	
	//通过calloc申请堆内存,用指针变量接收返回的堆内存的首地址,用于存储用户输入的字符串
	p = (char *)calloc(1,100);
	
	//确认申请堆内存是否成功,错误处理 
	if(NULL == p){
		perror("堆内存申请异常");
		return -1;   //程序异常退出 
	} 
	
	//提示用户输入字符串,接收字符串 
	printf("please input string:");
	scanf("%s", p);
	
	//调用递归函数
	printf("长度为:%d\n", stl(p));
	
	//使用完成释放堆内存,同时让指针再次指向NULL 
	free(p);
	p = NULL; 
    return 0; 
}

4、费波拿契数

#include <stdio.h>
#include <stdlib.h>

int fibnum(int n)
{
	if(0 == n || 1 == n){
		return n;
	}
	
	return fibnum(n-1) + fibnum(n-2);
}

int main()
{

	int n=0;
	while(1){
		printf("请输入是第几个数:"); 
		scanf("%d", &n);
		printf("第%d个费波拿契数是%d\n", n, fibnum(n));
	}
	
    return 0; 
}

相关文章:

  • 留记录excel 模板导入
  • 深度学习处理时间序列(3)
  • AOA与TOA混合定位,MATLAB例程,三维空间下的运动轨迹,滤波使用EKF,附下载链接
  • Promise详解
  • 食品级低聚木糖市场报告​:2024年全球食品级低聚木糖市场销售额达到了0.35亿美元
  • Spring Cloud ReactorServiceInstanceLoadBalancer 自定义负载均衡
  • Codeforces Round 1013 (Div. 3)-F
  • 信息系统项目管理师知识体系
  • 0328-内存图2
  • 并发编程--共享内存SHM
  • OpenGL —— 基于Qt的视频播放器 - ffmpeg硬解码,QOpenGL渲染yuv420p或nv12视频(附源码)
  • Windows10上部署DeepSeek R1保姆式操作详解(ollama方式+ChatBox)
  • 解决PLC通信会断然后报错的问题
  • 金融级密码管理器——生物特征密钥绑定方案
  • python算法:leetcode二叉树相关算法题
  • 搭建Flutter开发环境 - MacOs
  • Django项目之订单管理part6(message组件和组合搜索组件)
  • 繁华 李劭卓2025.3.28
  • RWEQ 模型深度讲解:结合 Python、ArcGIS 等实现土壤风蚀归因分析
  • 【CVE-2025-30208】| Vite-漏洞分析与复现
  • 东航C919航线上新!正式投入上海虹桥—深圳航线运营
  • 大风+暴雨,中央气象台双预警齐发
  • 小米汽车回应部分SU7前保险杠形变
  • 上百家单位展示AI+教育的实践与成果,上海教育博览会开幕
  • 新片|《碟中谍8:最终清算》定档5月30日
  • 国税总局上海市税务局回应刘晓庆被举报涉嫌偷漏税:正依法依规办理