C语言-Day3-初识函数/数组/操作符/关键字/定义宏


本篇内容总结了菜鸟教程-C语言中相关内容(https://www.runoob.com/cprogramming/c-basic-syntax.html),用以查阅自用。

一、函数:

函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。

您可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的,但在逻辑上,划分通常是根据每个函数执行一个特定的任务来进行的。

函数声明告诉编译器函数的名称、返回类型和参数。函数定义提供了函数的实际主体。

C 标准库提供了大量的程序可以调用的内置函数。例如,函数 strcat() 用来连接两个字符串,函数 memcpy() 用来复制内存到另一个位置。

函数还有很多叫法,比如方法、子例程或程序,等等。
C 语言中的函数定义的一般形式如下:

return_type function_name( parameter list )
{
   body of the function
}

在 C 语言中,函数由一个函数头和一个函数主体组成。下面列出一个函数的所有组成部分:

1.返回类型:一个函数可以返回一个值。return_type 是函数返回的值的数据类型。有些函数执行所需的操作而不返回值,在这种情况下,return_type 是关键字 void。
2.函数名称:这是函数的实际名称。函数名和参数列表一起构成了函数签名。
3.参数:参数就像是占位符。当函数被调用时,您向参数传递一个值,这个值被称为实际参数。参数列表包括函数参数的类型、顺序、数量。参数是可选的,也就是说,函数可能不包含参数。
4.函数主体:函数主体包含一组定义函数执行任务的语句。
举例:

/* 函数返回两个数中较大的那个数 */
int max(int num1, int num2) 
{
   /* 局部变量声明 */
   int result;
 
   if (num1 > num2)
      result = num1;
   else
      result = num2;
 
   return result; 
}

二、数组:

在 C 中要声明一个数组,需要指定元素的类型和元素的数量,如下所示:

type arrayName [ arraySize ];

这叫做一维数组。arraySize 必须是一个大于零的整数常量,type 可以是任意有效的 C 数据类型。例如,要声明一个类型为 double 的包含 10 个元素的数组 balance,声明语句如下:

double balance[10];

现在 balance 是一个可用的数组,可以容纳 10 个类型为 double 的数字。


三、操作符:

运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C 语言内置了丰富的运算符,并提供了以下类型的运算符:

算术运算符

在这里插入图片描述

关系运算符

在这里插入图片描述

逻辑运算符

在这里插入图片描述

位运算符

假设如果 A = 60,且 B = 13,现在以二进制格式表示,它们如下所示:

A = 0011 1100

B = 0000 1101


A&B = 0000 1100

A|B = 0011 1101

A^B = 0011 0001

~A = 1100 0011

赋值运算符

在这里插入图片描述

杂项运算符

在这里插入图片描述

注意:
1.sizeof不是函数,而是一个操作符。
2.ex1?ex2:ex3表示:ex1为真,则执行ex2,否则执行ex3。举例:

int a = 0;
int b = 0;
b = (a == 1) ? 2 : 3;//如果a==1,则b=2,若a≠1,则b=3。此处b=3。

3.逗号运算符:从左到右依次执行,最后一步执行的结果为最终结果。举例:

int main()
{
	int a, b, c, d,val;
	a = 2;
	val = (b = a - 2, c = b + 5, d = c - 2);//从左到右依次计算,将最后一次计算出的d的值赋给val = 3
	printf("%d", val);
}

在这里插入图片描述


四、关键字:

在这里插入图片描述

关键字 typedef

typedef 顾名思义是类型定义,这里应该理解为类型重命名。

//将unsigned int 重命名为uint_32, 所以uint_32也是一个类型名
typedef unsigned int uint_32;
int main()
{
    //观察num1和num2,这两个变量的类型是一样的
    unsigned int num1 = 0;
    uint_32 num2 = 0;
    return 0;
}

关键字 static

在C语言中:
static是用来修饰变量和函数的
1. 修饰局部变量-称为静态局部变量
2. 修饰全局变量-称为静态全局变量
3. 修饰函数-称为静态函数

1.修饰局部变量

观察下面两段代码及其运行结果:
(一)

#include <stdio.h>
#include <string.h>

void test()
{
	int a = 0;
	a++;
	printf("%d ",a);
}
int main()
{
	int i = 0;
	for (i = 0; i < 10; i++)
		test();
}

在这里插入图片描述
(二)

#include <stdio.h>
#include <string.h>

void test()
{
	static int a = 0;
	a++;
	printf("%d ",a);
}
int main()
{
	int i = 0;
	for (i = 0; i < 10; i++)
		test();
}

在这里插入图片描述
综上我们发现,经过static修饰的局部变量,在出了作用域后没有销毁,其生命周期延长了,和全局变量一样。这说明,static改变了局部变量的存储类型。在这里插入图片描述
图源B站鹏哥C语言。

2.修饰全局变量

当在其他.c文件中使用static声明变量后,我们发现,即使在主函数源文件中使用extern声明了该变量,该变量也无法使用,这表示经过static修饰的变量,只可以在本源文件(.c文件)中调用。

3.修饰函数

与上面static修饰全局变量一样,static修饰函数后,使得该函数具有内部连接属性,没有了外部链接属性,只能在本源文件(.c文件)中使用该函数。

关键字 extern

在实际使用中我们经常遇到这种情况:在其他源文件中定义了一个变量,但是需要在另一个源文件中使用,如何使得所有源文件中的该变量都是同一个变量呢?那么需要在主函数的源文件中使用extern来声明该变量,就可以使用了。对于其他源文件中的函数也是如此,也可以在主函数文件中extern声明该函数。
比如下面两个代码块表示两个.c文件:

//a.c文件
int g_val = 100;
//b.c文件
extern int g_val;
int main()
{
	printf("%d", g_val);
}

五、定义宏:

#define定义宏时注意变量是不是要加括号。举例:

//宏定义示例:
#define ADD1(X,Y) X + Y
#define ADD2(X,Y) ((X) + (Y))
int main()
{
	int a = 1;
	int b = 2;
	int sum1 = 4 * ADD1(a, b);//4*1+2=4+2=6
	int sum2 = 4 * ADD2(a, b);//4*(1+2)=4*3=12
	printf("%d  %d", sum1, sum2);
}

两个宏是不一样的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值