嵌入式C语言||malloc+static

1 malloc 函数

# include 
# include
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;

}

嵌入式C语言||malloc+static_第1张图片

来源:结构体变量动态分配内存
嵌入式C语言||malloc+static_第2张图片

2 static局部变量

2.1静态局部变量

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

}

在上面的例子中,count是一个静态局部变量,它的值在函数调用之间是保持不变的。每次调用foo函数时,count的值都会加1
嵌入式C语言||malloc+static_第3张图片

2.2 静态全局变量

// file1.c
# include

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

嵌入式C语言||malloc+static_第4张图片这里count是一个静态全局变量,

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

3 静态函数的用法

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

嵌入式C语言||malloc+static_第5张图片

4 静态结构体成员

#include
// 静态成员变量属于类
// 结构体不是类
// 因此 结构体 不能包含 成员函数、静态成员变量
// 要在 结构体 中使用 静态成员变量 可在结构体外定义全局静态变量
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;
}

嵌入式C语言||malloc+static_第6张图片

你可能感兴趣的:(c语言,开发语言)