1 malloc 函数
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;
}