关键字初识

简介: 关键字初识

一、常见关键字:

//auto break case char const continue default do double else enum extern float for goto if 
//int long register return short signed sizeof static struct switch typedef union unsigned void volatile while

对于define、include它们不是关键字,而是预处理指令

//注:现在先列出关键字,防止在定义变量名时使用到关键字

二、简单讲解几个关键字

1.typedef

typedef unsigned int u_int; //typedef :类型重命名(可以将复杂的类型简单化 - 将unsigned int 重命名u_int)
int main()
{
  //signed(有符号)  unsigned(无符号)
  unsigned int num1 = 100;
  u_int num2 = 20;//同unsigned int num2=20;
  return 0;
}

2.static - 静态的(可以修饰局部变量、全局变量、函数)

2.1.static修饰局部变量

#include<stdio.h>
void test1()
{
  int a = 1;
  a++;
  printf("%d ", a);
}
//问程序结束后的结果?(可以先思考再与下面的答案校对)
int main()
{
  int i = 0;
  while (i < 10)
  {
    test1();
    i++;
  }
  //程序结束结果是:2 2 2 2 2 2 2 2 2 2
  //在test1函数内创建了局部变量a,test1函数结束时int a=2被销毁,而在每次重新进入test1时又重新创建int a=1
  return 0;
}
#include<stdio.h>
void test2()
{
  static int a = 1;
  a++;
  printf("%d ", a);
}
//问现在加上static修饰局部变量的结果?(可以先思考再与下面的答案校对)
int main()
{
  int i = 0;
  while (i < 10)
  {
    test2();
    i++;
  }
  //程序结束结果是:2 3 4 5 6 7 8 9 10 11
  //第一次进入test2函数内部,创建了局部变量a,且出来后并未销毁a 
  //static修饰局部变量,改变了局部变量的生命周期(本质上是改变了变量的存储类型)
  //加上static的局部变量a,由栈区转向静态区,生命周期同全局变量一样
  //     栈区       堆区        静态区
  //  ------------ -------------- --------------------
  // | 局部变量   | 动态内存分配 |       全局变量     |
  // | 函数的参数 |         |static修饰的静态变量|
  //  ------------ -------------- --------------------
  return 0;
}

2.2.static修饰全局变量(这里新建2个文件)

文件一

#include<stdio.h>
//extern声明外部符号 - 可以不加
extern int g_va1;
extern int g_va2;
int main()
{
  //全局变量声明后在整个工程中都可以使用
  printf("%d\n", g_va1);
  //不能另一个文件中使用static修饰的全局变量
  //printf("%d\n", g_va2);//err
  //static修饰全局变量,使得这个全局变量只能在自己所在的源文件内部可以使用,其它文件不能使用
  //为什么全局变量能在其它源文件内部使用?
  //全局变量在其它源文件内部可以使用,是因为全局变量具有外部链接属性;但是被static修饰后,就变成了内部链接属性,其它源文件不能链接到这个静态全局变量了
  return 0;
}

文件二、

//定义全局变量
int g_va1 = 2022;
static int g_va2 = 2021;

2.3.static修饰函数(这里新建2个文件)

文件一

#include<stdio.h>
//声明函数 - 只要函数名、返回类型、参数类型(不一定需要参数名)
extern int Add1(int, int);
int main()
{
  int a = 10;
  int b = 20;
  //没有使用static
  int sum1 = Add1(a, b);
  printf("sum=%d\n", sum1);
  //使用了staitc - err
  /*int sum2 = Add2(a, b);
  printf("sum=%d\n", sum2);*/
  //static修饰函数,使得函数只能在自己所在的源文件内部使用,不能在其它源文件内部使用
  //本质上static是将函数的外部链接属性变成了内部链接属性(同static修饰全局变量)
  return 0;
} 

文件二

定义全局变量
int Add1(int x, int y)
{
  return x + y;
}
static int Add2(int x, int y)
{
  return x + y;
}

3.define定义常量和宏 - define是一个预处理指令

3.1.define定义常量

#include<stdio.h>
#define A 2021
int main()
{
  printf("%d\n", A);//2021
  return 0;
}

3.2.define定义宏

#include<stdio.h>
#define Add1(x,y) x+y
#define Add2(x,y) ((x)+(y))
int main()
{
  printf("%d\n", Add1(2, 3));
  printf("%d\n", 4*Add1(2, 3));//11 
  //难道这里的结果不应该是20吗?
  //其实上面定义的Add1是有缺陷的
  //2和3传上去后,它会替换x和y得到4*2+3 = 11
  //解决方法 
  //1.在调用的时候改变
  printf("%d\n", 4 * (Add1(2, 3)));//20
  //2.在定义的时候改变 - 将后面的表达式定义为一个整体   
  printf("%d\n", 4 * Add2(2, 3));//20
  //当然是第二种方法更好
  return 0;
}



相关文章
|
存储 Cloud Native API
oss云网关配置
配置阿里云OSS与云网关实现灵活数据传输和访问控制。步骤包括开通OSS服务,创建Bucket,获取访问凭证,可选配置CORS和生命周期规则。云网关配置涉及阿里云云原生网关的代理规则设定或使用云存储网关集成OSS访问,具体配置需参照产品文档,因产品更新可能会有变动。
440 1
|
机器学习/深度学习 数据采集 测试技术
Toad:基于 Python 的标准化评分卡模型(上)
在信贷的风控模型中最常用、最经典的可能要属评分卡了,所谓评分卡就是给信贷客户进行打分,按照不同业务场景可为贷前、贷中、贷后和反欺诈,一般叫做ABCF卡。模型得到分数,通过设置cutoff阈值给出评估结果,结果可直接用于通过或拒绝,或者用于策略应用。
2505 0
Toad:基于 Python 的标准化评分卡模型(上)
|
运维 监控 Kubernetes
微服务:监控体系,容器监控
微服务:监控体系,容器监控
微服务:监控体系,容器监控
|
搜索推荐 Java 自然语言处理
天猫精灵DIY--技能应用
简述天猫精灵技能开发的基础操作
天猫精灵DIY--技能应用
|
弹性计算 监控 数据挖掘
阿里云2核和4核服务器性能差别大吗?如何选择
阿里云服务器2核和4核区别如何选择?云服务器的vCPU核心数主要影响多线程和多进程任务的执行效率,CPU型号、内存及磁盘等硬件相同的情况下,CPU核数越高计算性能越好
1429 0
阿里云2核和4核服务器性能差别大吗?如何选择
|
编解码 算法
Google Earth Engine(GEE)——全球降水量 (GPM)数据集
Google Earth Engine(GEE)——全球降水量 (GPM)数据集
1309 0
Google Earth Engine(GEE)——全球降水量 (GPM)数据集
|
机器学习/深度学习 算法 数据库
①机器学习推荐算法之关联规则Apriori与FP-Growth算法详解
机器学习推荐算法之关联规则Apriori与FP-Growth算法详解
469 0
①机器学习推荐算法之关联规则Apriori与FP-Growth算法详解
|
安全 网络协议 网络安全
3分钟搞定从申请ssl证书到域名服务器配置
3分钟搞定从申请ssl证书到域名服务器配置
836 0
3分钟搞定从申请ssl证书到域名服务器配置
|
移动开发 监控 前端开发
耕耘大前端技术七年,我的九点思考总结
58 大前端技术服务体系开发七年有余,目前已成为 58 前端的顶梁柱,那么这一顶梁柱是如何是搭建起来的?又将朝向哪个方向发展呢? 本期,我们采访了 58 集团前端技术部负责人李祎,他分享了 58 集团大前端技术服务体系的建设经验,以及他对未来大前端趋势的思考。本文为采访整理文,期待你有所收获~
639 0
耕耘大前端技术七年,我的九点思考总结