(初识C语言p3) C语言从入门到入土(入门篇)(一)

简介: 初识C语言 什么是C语言 第一个C语言程序 数据类型 变量、常量 字符串+转义字符+注释 选择语句 循环语句 函数 数组 操作符 常见关键字

11.1 关键字 typedef


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

比如:

13.png

上述两个式子是一样的哈!


11.2 关键字static


在 C 语言中:

static 是用来修饰:

1. 修饰局部变量

2. 修饰全局变量

3. 修饰函数


11.2.1 修饰局部变量


// 代码 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 ;
}

14.png


// 代码 2
#include <stdio.h>
void test ()
{
    //static 修饰局部变量
    static int i = 0 ;
    i ++ ;
    printf ( "%d " , i );
}
int main ()
{
int i = 0 ;
    for ( i = 0 ; i < 10 ; i ++ )
  {
        test ();
  }
    return 0 ;
}


15.png



即第一次使用后后面就没有再用了

这里就再牵扯到内存了(先简单提一下):

16.png17.png



(其中只是举了些例子,并不是这有这些,而且也不止是只有这三个区,只是主要是这三个哈!)

18.png

程序从test.c到test.exe的过程

19.png

对于上图:告诉我们static在修饰局部变量的时候是在编译就完成了的,即在程序运行之前。


对比代码1和代码2的效果理解static修饰局部变量的意义。


结论:

static 修饰局部变量改变了变量的生命周期

让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。


11.2.2 修饰全局变量

// 代码 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 ;
}

//上述的add.c 和test.c是指两个不同的源文件

20.png


代码 1 正常,代码 2 在编译的时候会出现连接性错误。

结论:

一个全局变量被 static 修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件内使

用。

这里就要再提到 extern 这个关键字,再使用不同源文件的内容的时候,要在想使用另一个源文件内容的源文件里面进行声明(如下用extern),但是如果另一个源文件那个想要使用的内容被static修饰的话,就算声明也是没有用的(即不能使用)。(如下图)


21.png22.png23.png24.png25.png26.png


PS(static修饰全局变量):


1.生命周期还是不变,储存位置也不变,因为还是在静态区, 只是 从全局变量变为了静态变量(都在静态区)


2.静态变量只能在自己的源文件内部使用  


11.2.3 修饰函数


//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 修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。

剩余关键字后续课程中陆续会讲解


相关文章
|
7天前
|
存储 C语言 索引
C语言数组:从入门到进阶
C语言数组:从入门到进阶
13 0
|
8天前
|
C语言
C语言结构体教程:从入门到实践(保姆式教学)
C语言结构体教程:从入门到实践(保姆式教学)
|
8天前
|
C语言
C语言中求x的n次方:从入门到实践(保姆式教学)
C语言中求x的n次方:从入门到实践(保姆式教学)
11 0
|
17天前
|
IDE Java 开发工具
C语言入门(前期准备工作)——超级详细的建议和教学,带你顺利跨越编程门槛
C语言入门(前期准备工作)——超级详细的建议和教学,带你顺利跨越编程门槛
|
20天前
|
C语言
【C语言入门小游戏】扫雷
【C语言入门小游戏】扫雷
21 1
|
20天前
|
编译器 C语言
【C语言入门小游戏】三子棋
【C语言入门小游戏】三子棋
22 0
【C语言入门小游戏】三子棋
|
23天前
|
编译器 C语言 C++
从C语言到C++③(第一章_C++入门_下篇)内联函数+auto关键字(C++11)+范围for+nullptr(下)
从C语言到C++③(第一章_C++入门_下篇)内联函数+auto关键字(C++11)+范围for+nullptr
21 0
|
23天前
|
存储 安全 编译器
从C语言到C++③(第一章_C++入门_下篇)内联函数+auto关键字(C++11)+范围for+nullptr(上)
从C语言到C++③(第一章_C++入门_下篇)内联函数+auto关键字(C++11)+范围for+nullptr
25 0
|
23天前
|
存储 安全 编译器
从C语言到C++②(第一章_C++入门_中篇)缺省参数+函数重载+引用(下)
从C语言到C++②(第一章_C++入门_中篇)缺省参数+函数重载+引用
20 0
|
23天前
|
存储 编译器 C语言
从C语言到C++②(第一章_C++入门_中篇)缺省参数+函数重载+引用(中)
从C语言到C++②(第一章_C++入门_中篇)缺省参数+函数重载+引用
23 0