嵌入式C语言||malloc+static

1 malloc 函数

# include <stdlib.h>
# include<stdio.h>
int main() {
	int* arr;
 // *arr指向arr所指内存空间的值;
 // arr指向分配内存空间的起始地址
	int i;
	arr = (int*)malloc(5 * sizeof(int));
	for (i = 0; i < 5; i++) {
		arr[i] = i + 1;
	}
	for (i = 0; i < 5; i++) {
		printf("%d\n", arr[i]);
	}
	printf("\n");
	// 
	free(arr);
	return 0;

}

在这里插入图片描述

来源:结构体变量动态分配内存
在这里插入图片描述

2 static局部变量

2.1静态局部变量

# include<stdio.h>
void foo() {
	static int count = 0; // 定义静态局部变量
	count++;
	printf("count = %d\n", count);
}
int main() {
	foo();
	foo();
	foo();
	return 0;

}

在上面的例子中,count是一个静态局部变量,它的值在函数调用之间是保持不变的。每次调用foo函数时,count的值都会加1
在这里插入图片描述

2.2 静态全局变量

// file1.c
# include<stdio.h>

static int count = 0; // 静态全局变量
void foo() {
	count++;
	printf("count = %d\n", count);
}
// file2.c
#include <stdio.h>
extern void foo(); // 声明函数
int main() {
	foo();
	foo();
	foo();
	return 0;
}

在这里插入图片描述这里count是一个静态全局变量,

extren 是一个关键字,声明一个变量或函数是在其他文件中定义的。
这段代码中,extern void foo();声明了一个函数foo(),这是在文件file.c中定义的。这样在main()中函数就可以调用函数foo()
需要注意的是,extern关键字只是声明了变量或函数的存在,而不是定义。在本例中,函数foo()的定义在另一个文件中,因此编译器在编译main()函数时并不知道foo()函数的具体实现,只有在链接时才会将foo()函数的定义与main()函数的调用连接起来。

3 静态函数的用法

#include<stdio.h>
static void foo() {
	printf("hello,world!\n");
}
int main() {
	foo();
	return 0;
}

在这里插入图片描述

4 静态结构体成员

#include<stdio.h>
// 静态成员变量属于类
// 结构体不是类
// 因此 结构体 不能包含 成员函数、静态成员变量
// 要在 结构体 中使用 静态成员变量 可在结构体外定义全局静态变量
struct Person {
	char name[20];
	// static int age;
};
 static int age;
int main() {
	struct Person p1 = { "Tom" };
	struct Person p2 = { "Jerry" };
	printf("%s's age is %d\n", p1.name, age);
	printf("%s's age is %d\n", p2.name, age);
	age = 20;
	printf("%s's age is %d\n", p1.name, age);
	printf("%s's age is %d\n", p2.name, age);
	return 0;
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
嵌入C语言是C标准委员会指定的C编程语言的一组语言扩展,通常用于解决不同嵌入系统的C扩展之间存在的共性问题。它需要对C语言进行非标准扩展,以支持增强的微处理器功能,如定点算术、多个不同的内存库和基本I/O操作。与C++相比,C语言更加简洁和轻量级,适用于嵌入系统开发。\[1\] 堆是用于程序动态申请分配和释放空间的一种内存区域。在C语言中,可以使用malloc和free函数,在C++中可以使用new和delete操作符来在堆中进行内存分配和释放。堆中的空间需要程序员手动释放,否则在程序结束后由系统自动回收。需要注意的是,这里的堆并不是数据结构中的堆。\[2\] 嵌入系统开发需要对硬件和软件进行深入理解,并结合特定的项目需求进行设计和实现。通过不断学习和实践,可以提高嵌入开发技能,开发出高效、稳定的嵌入系统。\[3\] #### 引用[.reference_title] - *1* *2* [嵌入C基础知识(1)](https://blog.csdn.net/xiaoyi9812/article/details/128920427)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [嵌入系统开发:使用C语言进行嵌入编程](https://blog.csdn.net/m0_75198698/article/details/130715374)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值