iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言实例梳理讲解常用关键字的用法
  • 394
分享到

C语言实例梳理讲解常用关键字的用法

2024-04-02 19:04:59 394人浏览 独家记忆
摘要

目录一、C语言关键字详解1. sizeof2. const3. static4. extern5. volatile6. typedef7. enum8. continue9. br

一、C语言关键字详解

1. sizeof

       sizeof相信大家并不陌生,其作用就是计算变量所占用的内存空间大小。sizeof的用法看着和函数很相似,但sizeof的真实身份确是:sizeof既是关键字,也是运算符,但不是函数! 这点需要大家牢记。还有非常重要的一点就是 sizeof中的表示式编译器不会进行编译处理,其原因就是sizeof是在编译的时候执行的,而C语言的运算符计算是在程序运行的时候执行的,故 sizeof里面的表达式是不会被执行的。下面以一个实际的程序来为大家演示一下。

源代码:

#include <stdio.h>
int main()
{
    int a = 3, b = 0;
    b = sizeof(a++);
    printf("a = %d, b = %d\n", a, b);
    return 0;
}

运行结果:

a = 3, b = 4

       看上面的程序就知道,虽然在sizeof表达式中变量 a 进行了自增1操作,但是 ++ 运算符是在程序执行的时候运行的,而sizeof表达式是在程序编译的时候运行的,所以 ++ 操作并不会被执行。

2. const

       const关键字的作用就是将变量常量化。大家都知道变量是可以进行随意赋值的,但是常量不可以。而被const修饰的变量是不能够被赋值的,尽管如此,但是我们依旧有方法可以将其进行改变,看下面例子:

源代码:

#include <stdio.h>
int main()
{
   const int a = 3;
   //a = 4;    //程序报错,因为变量a被const修饰成只读的变量了。
   int *p = &a;
   *p = 8;
   printf("a = %d\n", a);
    return 0;
}

运行结果:

a = 8

       上面讲到const修饰的变量是不能够被赋值的,因此程序中注释的那一行会报错,这是合理的。在下面我们定义了一个指针指向变量 a ,并且通过指针的方式来改变变量 a 地址里面的内容,这样是合理的。我们可以这样来理解,首先定义一个变量 a , 那么这个变量 a 是具有可读可写属性的,用 const 对 a 进行修饰,可以理解成 const 去掉了变量 a 的写属性,只保留了读属性,所以不能再对 a 进行赋值了。接着我们定义了一个指针变量指向 a 的地址,这个新定义的指针变量没有被 const 修饰,所以具备可读可写属性,然后通过指针变量来对地址里面的值进行操作,相当于是间接改变了变量 a 里面的内容。所以const的作用可以简述成一句话,那就是 const修饰谁,谁不能被直接赋值,但是可以通过间接的方式来改变其内容。

3. static

static修饰的变量会存储在静态存储区,静态存储区默认值是0。

static的三个作用:

  • static修饰的局部变量只会被初始化一次。
  • static修饰的全局变量只能在本文件中被使用,不能在其他文件中使用。
  • static修饰的全局函数只能在本文件中被使用,不能在其他文件中使用。

作用1将在下面的程序示例为大家演示,作用2和作用3将结合 extern 关键字为大家演示。

源代码:

#include <stdio.h>
void func()
{
    static int a = 2;
    int b = 2;
    a++;
    b++;
    printf("a = %d, b = %d\n", a, b);
}
int main()
{
    int i = 0;
    for(i = 1; i <= 2; i++){
        func();
    }
    return 0;
}

运行结果:

a = 3, b = 3
a = 4, b = 3 

       上面程序中,就是调用了两次 func() 函数,func() 函数的功能就是定义两个变量,并且执行加1操作,然后打印输出。变量 a 因为被 static 修饰,所以 a 被存储在静态存储区,静态存储区中的内容是要等程序结束完才会被释放。并且 a 只会在程序第一次进来的时候被初始化一次,后续再进来的时候不会再执行初始化操作,且保留函数上一次退出的时候的值。而变量 b 没有被 static 修饰,所以存储在栈区,栈区中的内容会在该函数结束的时候被回收,所以每次执行func() 函数变量 b 都会被重新赋值。

4. extern

       extern一般只有在多文件编程的时候才会被用到,是用来修饰变量或函数的,并且告诉编译器,该变量或函数是在别的文件中被定义的,下面用一个实例来进行具体说明:

文件1源代码:

int a = 10;
int add(int a, int b)
{
	return a+b;
}

文件2源代码:

#include <stdio.h>
extern int a;
extern int add(int a, int b);
int main()
{
	printf("a = %d, sum = %d\n", a, add(10, 20));
}

文件1和文件2同时运行结果:

a = 10, sum = 30

       上面程序中在文件2中调用了文件1的变量和函数,因为变量和函数都是在文件1中定义的,所以我们想要引用到文件1中的变量或函数时就必须要用extern进行声明,否则就会报错。

       假设我们在文件1中将变量和函数用static进行修饰,文件2不变。

改变后的文件1源代码

static int a = 10;
static int add(int a, int b)
{
	return a+b;
}

       这个时候再同时运行文件1和文件2就会报错。报错的原因就是在文件2中找不到变量和函数。其原因就是被static修饰的变量或函数只能在该文件中使用。

5. volatile

       volatile的作用一句话概述的话就是防止编译器优化。 cpu读取变量的时候是先从内存中读取到寄存器,再从寄存器中读取变量的值,但是可能在一些情况下编译器认为某些变量的值没有发生变化,因此就省略了从内存中读取变量的操作,直接从寄存器中读取。但是这些值可能会被外部环境所改变,比如说是在中断或者别的线程里面改变,这个时候如果编译器没有及时更新变量在寄存器中的值就会导致读取错误。但如果将这个变量用volatile关键字修饰的话就可以保证cpu在读取变量的时候一定会从内存中读取到寄存器,这样就可以保证读取变量的值不出错。

6. typedef

       typedef的作用就是为已有类型取别名,注意typedef只是取别名,而不是创造出一个新的类型。

源代码:

#include <stdio.h>
int main()
{
    typedef int u32;
    u32 a = 10, b = 20;   //等价于 int a = 10, b = 20;
    printf("a+b = %d\n", a+b);
    return 0;
}

运行结果:

a+b = 30

       上面代码中使用 typedef 将 int 类型取名为 u32,对于编译器而言,只要是看到 u32 都会默认将其转换为 int 。取别名主要是方便我们来写和阅读代码,而并不会说是创造了新类型。

7. enum

       enum就是枚举类型,因为我们有的变量可能取值范围就是那么几个值,不会出现别的值。像这种情况下我们就最好使用枚举类型,注意的是枚举的值默认是从0开始的,后面的值以此增加,如果我们对枚举变量中某个值进行手动赋值,那么被手动赋值的后面那个值会在此基础上加1。举个实例为大家具体讲解:

源代码:

#include <stdio.h>

enum weekday{Monday, Tuesday, Wednesday, Thursday, Friday, Staurday, Sunday};

enum num{ONE, TWO, THREE=5, FOUR, FIVE};
int main()
{
    enum weekday day = 3;
    day = Thursday;
    enum num number = FIVE;
    printf("day = %d, number = %d\n", day, number);
    return 0;
}

运行结果:

day = 3, number = 7

8. continue

continue用法两大注意项:

(1)continue只能用在循环体当中。

(2)continue的作用是结束本次循环,进入到下一次循环。

源代码:

#include <stdio.h>
int main()
{
    int i;
    int a[5] = {12, 13, 5, 11, 10};
    for(i = 0; i < 5; i++){
        if(a[i] < 10){
            continue;
        }
        printf("a[%d] = %d\n", i, a[i]);
    }
    return 0;
}

运行结果:

a[0] = 12
a[1] = 13
a[3] = 11
a[4] = 10

       从上面程序可以看出,a[2] 的结果是 5,所以结束本次循环进入下次循环,所以当 i 的值为 2 的时候不会输出打印。

9. break

break用法两大注意项:

(1)break只能用于循环体或 switch…case 语句中。

(2)break的作用是跳出本循环体外,值得注意的是如果有多层循环嵌套的话,break是只能跳出它所在的那一层循环体。

源代码:

#include <stdio.h>
int main()
{
    int i;
    int a[5] = {12, 13, 5, 11, 10};
    for(i = 0; i < 5; i++){
        if(a[i] < 10){
            break;
        }
        printf("a[%d] = %d\n", i, a[i]);
    }
    return 0;
}

运行结果:

a[0] = 12
a[1] = 13

       从上面程序看,a[2] 的结果是 5,break就直接跳出了循环体,然后程序就结束运行了。因此从这里就能够看出continue关键字和break关键字最大的区别了,这两个关键字的区别也是常考的,大家可以好好熟悉。

到此这篇关于C语言实例梳理讲解常用关键字的用法的文章就介绍到这了,更多相关C语言关键字内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言实例梳理讲解常用关键字的用法

本文链接: https://www.lsjlt.com/news/147940.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言实例梳理讲解常用关键字的用法
    目录一、C语言关键字详解1. sizeof2. const3. static4. extern5. volatile6. typedef7. enum8. continue9. br...
    99+
    2024-04-02
  • C/C++举例讲解关键字的用法
    目录staticstatic修饰全局变量static修饰局部变量static修饰函数constBOOLbreakcontinuestatic static修饰全局变量 static修...
    99+
    2024-04-02
  • C++示例讲解friendstaticconst关键字的用法
    目录一、友元函数1.1重载operator<<1.2友元函数1.3友元类二、关键字const2.1const修饰类的成员函数三、关键字static3.1static类成员...
    99+
    2024-04-02
  • Verilog语言关键字模块例化实例讲解
    目录关键字:例化,generate,全加器,层次访问命名端口连接顺序端口连接端口连接规则用 generate 进行模块例化层次访问关键字:例化,generate,全加器,层次访问 ...
    99+
    2023-05-15
    Verilog语言关键字模块例化 Verilog 模块例化
  • c语言static关键字用法详解
    目录1.static修饰全局变量2.static修饰函数3.static修饰局部变量总结:1.static修饰全局变量 我们创建两个源文件,一个test.c,一个main.c 现在...
    99+
    2024-04-02
  • C语言内存操作函数使用示例梳理讲解
    目录一、memcpy()函数原型参数说明模拟算法使用示例二、memmove()函数原型参数说明模拟算法使用示例三、memset()函数原型参数说明使用说明使用示例四、memcmp()...
    99+
    2024-04-02
  • C语言详细分析讲解关键字const与volatile的用法
    目录一、const 只读变量二、const 全局变量的分歧三、const 的本质四、const 修饰函数参数和返回值五、volatile 解析六、小结一、const 只读变量 con...
    99+
    2024-04-02
  • C语言中volatile关键字的深入讲解
    1. 什么是volatile关键字? volatile用于声明一个变量,告诉编译器该变量值容易发生改变,在编译、读取、存储该变量的时候都不要做任何优化,因此编译后的程序每次需要存储...
    99+
    2024-04-02
  • C语言的static关键字应用实例分析
    这篇文章主要介绍“C语言的static关键字应用实例分析”,在日常操作中,相信很多人在C语言的static关键字应用实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言的static关键字应用实例分析...
    99+
    2023-06-30
  • C语言简明介绍常见关键字的用法
    目录1、关键字2、常见关键字1、关键字 关键字是C语言提供的,不能自己创建关键字; 关键字不能用作变量名,eg:int char;这样的写法是不可取的。 2、常见关键字 auto b...
    99+
    2024-04-02
  • C语言实例讲解嵌套语句的用法
    目录一 、if 嵌套二、比较ab两个数值大小三、总结一 、if 嵌套 格式: if ( 条件 ){    if( 嵌入一个条件 ){   &n...
    99+
    2024-04-02
  • C语言常见关键字怎么使用
    这篇文章主要介绍“C语言常见关键字怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言常见关键字怎么使用”文章能帮助大家解决问题。1、关键字关键字是C语言提供的,不能自己创建关键字;关键字不...
    99+
    2023-07-02
  • c语言中常见的关键字
    c语言中的关键字是预先定义的特殊单词,用于特定目的。常见关键字包括:数据类型(int、float、double、char),控制流(if、else、for、while、do...whil...
    99+
    2024-05-09
    c语言 作用域 typedef
  • C语言全面细致精讲关键字的使用
    目录1、switch 深入理解2、如何正确的使用 case3、循环语句while for do while深度讲解4、continue的作用是什么5、goto真的没人用了吗6、voi...
    99+
    2024-04-02
  • C语言详细分析讲解关键字enum与sizeof及typedef的用法
    目录一、枚举类型的使用方法二、sizeof 关键字的用法三、typedef 的意义四、小结一、枚举类型的使用方法 enum 是 C 语言中的一种自定义类型enum 值是可以根据需要自...
    99+
    2024-04-02
  • C语言volatile关键字的作用与示例
    目录写在前面volatile和内联汇编的volatile的选择写在前面 版本信息:Linux操作系统,x86架构,Linux操作系统下GCC9.3.1版本。GCC 9.3.0手册。 ...
    99+
    2023-05-15
    C语言volatile关键字 C语言volatile
  • C 语言基础之C语言的常见关键字
    目录​1、auto 2、register 3、signed和unsigned 4、typedef 5、extern 6、拓展首先我们简单的和这些关键字见见面(被高亮的关键...
    99+
    2024-04-02
  • C语言详细分析讲解关键字goto与void的作用
    目录一、关于goto二、void 的意义三、小结一、关于goto 高手潜规则:禁用 goto项目经验:程序质量与 goto 的出现次数成反比最后的判决:将 goto 打入冷宫 下面看...
    99+
    2024-04-02
  • C语言 socketpair用法案例讲解
    socketpair()函数的声明: #include <sys/types.h> #include <sys/socket.h> int socketp...
    99+
    2024-04-02
  • C语言示例讲解ifelse语句的用法
    目录1、前言2、if语句的语法结构3、关于if else语句的示例4、if else 书写形式的对比5、例子1、前言 (1)C语言是结构化的程序设计语言。C语言的三种基本程序结构分别...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作