C语言——关键字

本文详细介绍了C语言中的关键字,如auto、break、case、const、continue等,并重点讲解了static关键字的使用。static用于修饰局部变量、全局变量和函数,改变它们的作用域和生命周期。通过示例代码,解释了static如何影响局部变量的持久化和全局变量的文件范围。此外,还提及了extern关键字用于声明外部符号。
摘要由CSDN通过智能技术生成

常见关键字

  • auto    定义自动变量 

       auto int( 所有的局部变量都是auto的,即自动创建自动回收,因此一般都省略auto)

  • break   定义终止    一般用于循环  while,for,do,switch

  • case   用于switch语句

  • char  

  • const   常属性    用于修饰变量,修饰指针

  • continue  用于循环

  • default    默认  用于switch  case语句

  • double    用于类型 和if else搭配使用

  • enum   枚举

  • do   用于do  while语句

  • extern  用于声明外部符号

  • goto   分支和循环

  • register    寄存器    访问速度快 

  • return  用于函数

  • signed/unsgined  用于类型,本身不是类型,是关键字(有符号的,无符号的)

  • void 无,空     一般用于函数的返回类型,函数参数,修饰指针 

  • volatile     linux操作系统

  • static  静态的

  • struct   结构体

  • union   联合体

     (三个可以自定义的类型  : union,struct,enum)

  • typedef    类型重定义


  • 关键字 typedef
typedef 顾名思义是类型定义,这里应该理解为类型重命名。
类型重命名怎么用?

类型重命名用法与变量定义相似,只是在前面加上 typedef

创建平台无关的数据类型,比如: time_t 、 size_t 、 uint8_t 、 int8_t 等。
//将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>
void test()
{
    int i = 0;
    i++;
    printf("%d ", i); }
int main()
{
 int i = 0;
    for(i=0; i<10; i++)
   {
        test();
   }
    return 0; }


//代码2
#include <stdio.h>
void test()
{
    //static修饰局部变量
    static int i = 0;
    i++;
    printf("%d ", i);
}
对比代码 1 和代码 2 的效果理解 static 修饰局部变量的意义。
结论:
static修饰局部变量改变了变量的生命周期。
让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。
修饰全局变量
//代码1
//add.c
int g_val = 2018;
//test.c
int main()
{
    printf("%d\n", g_val);
    return 0; 
}



//代码2
//add.c
static int g_val = 2018;
//test.c
int main()
{
    printf("%d\n", g_val);
    return 0; 
}
代码 1 正常,代码 2 在编译的时候会出现连接性错误。
结论:
一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件内使
用。
修饰函数
//代码1
//add.c
int Add(int x, int y) {
    return c+y; }
//test.c
int main()
{
    printf("%d\n", Add(2, 3));
    return 0;
}


//代码2
//add.c
static int Add(int x, int y) {
    return c+y; }
//test.c
int main()
{
    printf("%d\n", Add(2, 3));
    return 0; 
}
代码 1 正常,代码 2 在编译的时候会出现连接性错误 .
结论:
一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。

static修饰局部变量,改变了变量的存储类型(有栈区存储变为静态区)。从而使得静态的局部变量出了自己的作用域也不会销毁,其实相当于改变了局部变量的生命周期。

如果想使用来自其他文件的全局变量,需要先进行声明。

extern是一个关键字,是专门用来声明外部符号的。

一个全局变量在整个工程的其他文件内部能够被使用,是因为全局变量具有外部链接属性。当一个外部变量备static修饰的时候,这个变量的外部链接属性就变成了内部链接属性,使得这个全局变量只能在自己的源文件内部使用,其他文件不能再使用,给我们的感觉是定义域变小了。

内存是一块比较大的使用空间,使用内存时会划分出不同的功能区域。

  1.     栈区:存放局部变量,临时变量
  2.     堆区:动态内存分配  
  3.      静态区:存放全局变量,存放静态变量,因此生命周期不变
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言,static关键字有多种作用。其之一就是修饰局部变量。当static用于修饰局部变量时,该变量只能在声明它的函数内部使用,无法被其他函数访问到。此外,这种修饰方式还具有以下几个特点: 1. 静态局部变量在程序执行过程只会被初始化一次,在函数调用时会保持其值不变。 2. 静态局部变量的作用域仅限于声明它的函数内部,也就是说,它只在该函数内部可见,不会被其他函数访问到。 3. 静态局部变量在函数执行结束后不会被销毁,而是会一直存在于程序的整个生命周期。 通过使用static修饰局部变量,可以实现在函数调用之间保持变量的值不变、避免与其他函数的同名变量冲突等效果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [C语言的Static关键字的作用](https://blog.csdn.net/weixin_65132948/article/details/123943258)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [初识C语言——关键字static的作用](https://blog.csdn.net/m0_70980326/article/details/125937438)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值