🍊博客主页:Geekwyz的江湖背景
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
🌟本文由 Geekwyz原创
🙏作者水平很有限,如果发现错误,欢迎留言
1.自定义数据类型
C语言提供了一个叫
typedef
的功能来声明一个已有的数据类型的新名字比如:typedef int length
,此时length就代替int的数据类型。
#include<stdio.h>
int main(){
typedef int len;
len a = 1;
printf("%d",a);
return 0;
}
- 自定义结构体变量
#include<stdio.h>
typedef struct data{
int a;
int b;
}p;
int main(){
//p就相当与struct data
p p1 = {1,2};
printf("%d\n",p1.a);
printf("%d",p1.b);
return 0;
}
2.我们联合
联合和结构体很像,但是数据存储的方式是不相同的,结构体的数据是分开存储的,而联合储存的数据确实存储在一起的,也就是说会发生数据的覆盖
#include<stdio.h>
union data{
int a;
int b;
}p;
int main(){
p.a = 1;
p.b = 2;
printf("%d\n",p.a);//输出2
printf("%x\n",&p.a);//输出地址601044
printf("%x\n",&p.b);//输出地址601044
return 0;
}
3.全局变量
定义在函数值外的变量,我们称之为全局变量,定义在函数内部的变量,我们称之为本地变量
- 如果全局变量没有初始化会得到0值
- 指针会的到NULL值
- 如果函数内部局部变量与全局变量相同,全局变量会被隐藏
#include<stdio.h>
int a = 12;
int main(){
printf("%d\n",a);
func();
return 0;
}
void func(void){
printf("%d",a + 1);
}
//全局变量的隐藏
#include<stdio.h>
int a = 2;
int main(){
int a = 1;
printf("%d",a);//输出1
return 0;
}
4.静静的变量
在本地变量定义时加上static修饰符就称之为静态本地变量
- 当函数离开时静态本地变量会继续存在并保持其值,全局的生存期,本地的作用域
#include<stdio.h>
int main(){
func();
func();
return 0;
}
void func (void){
static int a = 1;
int b = 1;
a += 1;
b += 1;
printf("a = %d\n",a);//生存期很长
printf("b = %d\n",b);//生存期很短
}
5.返回本地变量的地址
#include<stdio.h>
int* g(void);
int main(){
int* p = g();
printf("%d\n",*p);
printf("%d\n",*p);
return 0;
}
int* g(void){
int i = 12;
return &i;
}
我们发现两次输出的结果不一样,这是因为本地变量的生存期结束,我们也不知道,那地方到底存什么,使用全局变量和静态变量的函数的线程是不安全的