7.30学习日记(1)

目录

C语言

C语言关键字

一、typedef:类型重命名

二、Static

1.修饰局部变量:使得局部变量的生命周期延长至整个文件结束

①无static修饰时:

②有static修饰时:

说明:

2.修饰全局变量:全局变量的外部连接属性变成内部连接属性,其他源文件不可再 调用此全局变量

①无static修饰时:

②有static修饰时:

说明:

3.修饰函数:与修饰全局变量的作用类似,消除函数的外部连接属性

①无static修饰时

②无static修饰时:

说明:

static修饰前后对比:


C语言

注:一下所写均为新了解的知识并非整体的知识总结

C语言关键字

一、typedef:类型重命名

可以将复合型的类型进行重新定义例如:unsigned int、unsigned short、unsigned long、unsigned long long(注意:unsigned不可修饰float、double类型)和结构体等复合型变量

例1:重定义unsigned int

typedef unsigned int uint;将unsigned重定义为uint

int main()
{	
	uint num = 0; //直接引用uint,num就可以被定义为unsigned int类型
                  //与 unsigned int num = 0;等价
	return 0;
}

例2:定义结构体

typedef struct Node
{
	int data;
	struct Node* Next;
}Node;     //将结构体重定义为Node

int main()
{	
	Node n;//引用Node即可将n定义为结构体变量

	return 0;
}

二、Static

可以调整变量或函数的作用域和生命周期,可用于修饰局部变量、全局变量和函数

   (此处引用B站鹏哥C语言中的例子)

1.修饰局部变量:使得局部变量的生命周期延长至整个文件结束
①无static修饰时:
// 不加static
void test()
{
	int a = 1;
	a ++;
	printf("%d ",a);
}

int main()
{
	int i = 0;
    while (i < 3)
	{
		test();
		i++;
	}

	return 0;
}

输出结果:

2 2 2

说明:

  • 函数test中的变量a为局部变量,每次在调用test函数时生成,调用结束后自动初始化,循环调用三次,因此会输出三个2。

②有static修饰时:
// 加入static
void test()
{
	static int a = 1;
	a ++;
	printf("%d ",a);
}

int main()
{
	int i = 0;
    while (i < 3)
	{
		test();
		i++;
	}

	return 0;
}

输出结果:

2 3 4
说明:
  • 函数test中的变量a被static修饰后,每次调用test函数后变量a不会被初始化,而是保留上一次的值,循环调用test函数三次,因此输出为以上结果

2.修饰全局变量:全局变量的外部连接属性变成内部连接属性,其他源文件不可再 调用此全局变量
①无static修饰时:

文件1(test1.c)

int g_val = 2025;//在文件1中定义一个int类型的变量

文件2(test2.c)

extern int g_val;//声明外部变量后才能在本文件中调用其他文件中的全局变量

int main()
{
	printf("%d\n", g_val);

	return 0;
}

输出结果:

2025
②有static修饰时:

文件1(test1.c)

static int g_val = 2025;//将整型变量前加static进行修饰

文件2(test2.c)

extern int g_val;

int main()
{
	printf("%d\n", g_val);

	return 0;
}

输出结果:

说明:
  • 无static修饰时,g_val是定义在文件1中的一个全局变量,可以在其他文件中声明外部变量后调用,因此可以输出数字2025.
  • 有static修饰时候,g_val的作用范围被限制在了文件1中,其他文件不可调用,所以编译器会报错。
3.修饰函数:与修饰全局变量的作用类似,消除函数的外部连接属性
①无static修饰时

文件1(test1.c)

int Add(int x, int y)
{
	return x + y;
}

文件2(test2.c)

extern int Add(int x, int y);//声明外部函数

int main()
{
	int a = 10;
	int b = 20;
	int z = Add(a , b);
	printf("%d\n", z);
	
	return 0; 
}

输出结果:

30
②无static修饰时:

文件1(test1.c)

 static int Add(int x, int y)
{
	return x + y;
}

文件2(test2.c)

extern int Add(int x, int y);//声明外部函数

int main()
{
	int a = 10;
	int b = 20;
	int z = Add(a , b);
	printf("%d\n", z);
	
	return 0; 
}

输出结果:

说明:
  • 无static修饰时,在文件1中定义的函数具有外部连接属性,在其他文件中只需要声明外部函数即可调用,函数Add是将变量a,b相加的运算,因此输出结果30.
  • 有static修饰时,文件1中定义的函数外部连接属性变为内部连接属性,其他文件中不可调用,因此编译器报错。
static修饰前后对比:

局部变量

作用域生命周期
无static定义的函数内部函数调用期间
有static定义的函数内部程序运行期间

全局变量

作用域生命周期
无static整个工程文件内部程序运行期间
有static定义所在的文件内部程序运行期间

函数

作用域生命周期
无static整个工程文件内部程序运行期间
有static定义所在的文件内部程序运行期间
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值