首页 > 其他分享 >初识C语言:从0开始,由菜鸟变大牛(完结)

初识C语言:从0开始,由菜鸟变大牛(完结)

时间:2023-06-07 22:32:17浏览次数:35  
标签:int 菜鸟 地址 C语言 源文件 add 变大牛 printf 指针

上篇内容分享了两种语句(选择语句、循环语句)、函数、数组、各种操作符,本篇文章我们再来了解关于初识C语言的内容,同样,涉及到的知识不会太复杂,废话不多说,正文开始:

1.常见关键字

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

C语言提供了丰富的关键字,这些关键字都是语言本身预先设定好的,用户自己是不能创建关键字的。

关键字我们在本篇先介绍几个,后面遇到了再进行细致的讲解。

1.1关键字 typedef:

typedef顾名思义就是类型定义,在这里就是类型重命名。

比如:

typedef unsigned int uint_32;  //使用typedef重新定义一个类型:将unsigned int 重命名为uint_32
                               //但不会取消unsigned int 的含义
int main()
{
    unsigned int num1 = 0;    //unsigned 表示无符号,unsigned int表示无符号整数
                              //也就是处负数以外的整数
    uint_32 num2 = 0;        //经过重命名,这里的num2的类型与num1的类型一致
    return 0;
}

1.2关键字static:

在C语言中:

static是用来修饰变量和函数的

  • 修饰局部变量--称为静态局部变量
  • 修饰全局变量--称为静态全局变量
  • 修饰函数--称为静态函数

1.2.1修饰局部变量:

int main()
{
   int a = 10;//局部变量,自动创建,自动销毁的

   return 0;
}

局部变量是自动创建,在使用完之后便会自动销毁

当我们用static修饰局部变量之后会有怎样的效果呢?、

首先不用static修饰:

#include<stdio.h>
void add()
{
    int i = 0;          //局部变量自动创建,自动销毁并且,他只是作用于这个add函数
    i++;
    printf("%d ", i);
}
int main()
{
    int i = 0;
    while (i < 10)
    {
        add();    //设置一个函数
        i++;
    }
    return 0;
}

初识C语言:从0开始,由菜鸟变大牛(完结)_全局变量

可以很直观的看到,i每一次打印都是1,因为i在add函数中刚刚创建好是0,i++变成了1,然后打印,但是当再次进去add函数时,上次的i已经销毁,所以i又是从0开始,所以我们就得到了10个1

当我们用static修饰这个局部变量i的时候会有什么效果呢?

#include<stdio.h>
void add()
{
    static int i = 0;    //用static来修饰一下局部变量i
    i++;
    printf("%d ", i);
}
int main()
{
    int i = 0;
    while (i < 10)
    {
        add();
        i++;
    }
    return 0;
}

初识C语言:从0开始,由菜鸟变大牛(完结)_源文件_02

当我们用static来修饰局部变量之后,可以看到,每次i++之后的值都被保留了下来,不再销毁,哎呀呀,这可不得了呀,所以呀,老铁们,static在修饰局部变量时的作用是:改变了局部变量的生命周期,让静态局部变量出了它自己的作用域仍然可以继续存在,直到整个程序结束,它才的生命周期才跟着结束,但是,并不影响它的作用域。

1.2.2修饰全局变量:

全局变量它的生命周期是整个程序的生命周期,只有程序结束,它的生命周期才跟着结束。当我们有两个.c文件时,在一个.c文件中创建一个全局变量,在另外一个.c文件中就可以使用这个变量,在使用时要用extern来声明外部符号

//extern  变量类型   变量名称;   //用来声明外部符号

源文件:add.c:

int g_val = 2023;

源文件:test.c:

#include<stdio.h>
extern int g_val; //声明外部符号
int main()
{
    printf("%d\n",g_val);
    return 0;
}

初识C语言:从0开始,由菜鸟变大牛(完结)_全局变量_03

当在一个源文件中创建一个全局变量,那么如果我们需要在另外一个源文件中使用这个全局变量,我们只需要用extern来声明一下,就可以使用了,那我们用static来修饰一下这个全局变量之后又会是什么样的效果呢?

源文件:add.c:

static int g_val = 2023;

源文件:test.c:

#include<stdio.h>
extern int g_val;
int main()
{
    printf("%d\n",g_val);
    return 0;
}

初识C语言:从0开始,由菜鸟变大牛(完结)_指针变量_04

可以看到哇,这个static在修饰全局变量时居然不能使用了,所以呀,static在修饰全局变量时起的作用是:改变了全局变量的作用域,使得这个全局变量只能在自己所在的源文件内部进行使用。我们要知道全局变量是具有外部链接属性,而在用static修饰之后,使得它的外部链接属性变成了内部链接属性,使其只能在自己的源文件内部使用,从而给我们直观的感受就是改变了它的作用域。

1.2.3修饰函数:

函数也具有外部链接属性,所以我们同样使用两个源文件,在一个源文件中创建函数Add,在另外一个源文件使用Add函数:

源文件:add.c:

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

源文件:test.c:

#include<stdio.h>
extern int Add(int,int);  //这里注意,在使用extern声明外部函数时,需要加上参数类型,参数可加可不加
           //int是参数类型
int main()
{
    int x = 0;
    int y = 0;
    int add = 0;
    printf("请输入两个数:>");
    scanf("%d %d", &x, &y);
    add = Add(x, y);
    printf("add = %d", add);
    return 0;
}

初识C语言:从0开始,由菜鸟变大牛(完结)_C语言_05

在用static修饰函数时效果和修饰全局变量是一样的,都是改变链接属性,我们来验证一下:

源文件:add.c:

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

源文件:test.c:

#include<stdio.h>
extern int Add(int,int);
int main()
{
    int x = 0;
    int y = 0;
    int add = 0;
    printf("请输入两个数:>");
    scanf("%d %d", &x, &y);
    add = Add(x, y);
    printf("add = %d", add);
    return 0;
}

初识C语言:从0开始,由菜鸟变大牛(完结)_指针变量_06

效果很明显,也是不能使用了,所以static在修饰函数时改变了这个函数的链接属性,使其只能在本源文件中使用。

标签:int,菜鸟,地址,C语言,源文件,add,变大牛,printf,指针
From: https://blog.51cto.com/u_16129954/6435952

相关文章

  • C语言编程—预处理器
    预处理器不是编译器的组成部分,但是它是编译过程中一个单独的步骤。简言之,C预处理器只不过是一个文本替换工具而已,它们会指示编译器在实际编译之前完成所需的预处理。我们将把C预处理器(CPreprocessor)简写为CPP。所有的预处理器命令都是以井号(#)开头。它必须是第一个非空字符,为了......
  • Apache Solr 教程_编程入门自学教程_菜鸟教程-免费教程分享
    教程简介ApacheSolr是一个开源搜索服务器。Solr是用Java语言开发的,主要基于HTTP和ApacheLucene实现。存储在ApacheSolr中的资源存储为Document对象。ApacheSolr入门教程-从基本概念开始,简单易学地了解ApacheSolr,其中包括概述,搜索引擎基础知识,Windows环境,Had......
  • C语言判断大小端的几种方法
    在操作系统中,经常会用到判断大小端,很多面试题中也会经常遇到,以前的时候没有总结过,这里总结一下。以后用到了就直接可以用了。所谓的大小端,大致的解释意思就是:【大端模式】CPU对操作数的存放方式是高地址存放低位,低地址存放高位。【小端模式】CPU对操作数的存放方式是高地址存......
  • crc16校验C语言源码实例解析
    一概念:循环冗余码校验英文名称为CyclicalRedundancyCheck,简称CRC。它是利用除法及余数的原理来作错误侦测(ErrorDetecting)的。实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置,接收装置对收到的数据重新计算CRC并与收到的CRC相比较,若两个CRC值不同,则说明数据通讯出现......
  • C语言-状态机模式
    1.假设我们的交通信号灯控制器有以下三个状态:绿灯状态、黄灯状态和红灯状态。在绿灯状态下,我们可以选择进入黄灯状态或红灯状态。在黄灯状态下,我们等待一段时间,然后返回到红灯状态。2.Code点击查看代码#include<stdio.h>#include<unistd.h>//定义状态枚举类型typedefe......
  • 程序的编译与链接(C语言为例) #代码写好后到运行期间要经过怎样的过程呢?# 粗略版 #
    (编译与链接)前言每当我们运行一段代码时,编译器都会自动的帮我们编译代码并将代码转换为一个二进制可执行文件(.exe),有了这个可执行文件,便可以执行我们写的程序了。那么编译器对代码的编译以及生成可执行程序的过程是怎样的呢?这个问题便是本文章将要探讨的。程序的环境在A......
  • 逍遥自在学C语言 | break-循环的中断与跳转
    前言在C语言中,break语句是一种控制流语句,它用于终止当前所在的循环结构(for、while、do-while)或者switch语句,从而跳出循环或者结束switch语句的执行。一、人物简介第一位闪亮登场,有请今后会一直教我们C语言的老师——自在。第二位上场的是和我们一起学习的小白程序猿—......
  • C语言编程语法—文件读写
    一个文件,无论它是文本文件还是二进制文件,都是代表了一系列的字节。C语言不仅提供了访问顶层的函数,也提供了底层(OS)调用来处理存储设备上的文件。本章将讲解文件管理的重要调用。打开文件您可以使用fopen()函数来创建一个新的文件或者打开一个已有的文件,这个调用会初始化类型FIL......
  • 关于C语言题602
    1、编写函数voidcount(chara[],charw[][10],intn,intb[])。功能是:统计w指向的数组中的n个单词在a指向的字符串中各自出现的次数(将非字母字符看作单词分割符),拧将统计结果依次保存在b指向的数组中。 #include<stdio.h>#include<string.h>#defineN10intmain(){......
  • [linux]记录一次C语言综合练习
    题目根据特定功能设计程序,要求由main.c,Fun1.c-Fun3.c选择其中任意两个,共三个C语言文件和1个头文件组成,其中fun1.c,fun2.c和fun3.c都使用了define.h中的声明,C语言文件的功能分别是:fun1.c:输出9*9口诀fun2.c:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?......