C语言易错知识点

本文详细介绍了C语言的一些易错知识点,包括程序执行从main函数开始,进制问题,标识常量(宏)的使用,数组初始化的规则,static、register、extern和auto关键字的作用,以及局部变量与全局变量的重名处理。通过实例解析,帮助读者避免常见错误,加深对C语言的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

程序的执行总是从main函数开始,在main函数结束。主函数一定要用main表示

1、C语言中的进制问题

C语言中常用的进制有:二进制、八进制、十进制、十六进制

表示方法如下:

二进制:0,1;八进制:0 ~ 7;十进制:0 ~ 9;十六进制:0 ~ 9,a(A) ~ f (F)

为了区分不同的进制,八进制前加0,十六进制前加0x

举例:8(十进制)  08(八进制) 0x8(十六进制)1000(二进制)

2、标识常量(宏)

宏的表示方法:#define 宏名  表达式

  1. 宏名一般用大写,小写也可以,主要为了和变量区分,所以用大写
  2. 宏后面没有分号   
  3. 宏只是单纯的替换                                                                                                                                                                         案例代码如下:
    #include<stdio.h>
    //#define 宏名 表达式
    #define PI 3.1415926
    //求圓的面积和周长
    int main(void)
    {
       float r = 0;
       float l,s;
       //圆的周长
       l=2 * PI * r;
       //圆的面积
       s = PI * r * r;
       printf("圆的周长是%f,面积是%f\n",l,s);
       return 0;
    }

    2.1宏函数(既有函数的特点又有宏的特点)

    #define 函数名(形参) 函数体

    案例:利用宏函数实现两个数求和

    #include<stdio.h>
    //利用宏函数实现两个数的求和
    #define 函数名 (形参) 函数体
    #define ADD(a,b) a+b
    int main(void)
    {
       printf("%d\n"ADD(1,2));
       return 0;
    }

     3、初始化和赋值

            初始化:在定义变量时对变量赋值。例如:int a = 10;//初始化

            赋值:先定义一个变量,然后再赋值。例如:int a ,a = 10;//赋值

       4、数组的全部初始化和部分初始化

              (1)部分初始化:在部分初始化的时候,未初始化部分的值为0,因此可以利用这一特                   点给数组中的元素清零

                   int a[5] = {1,2,3};          a[0] = 1,a[1] = 2, a[2] = 3,a[3] = 0,a[4] =0;

               (2)全部初始化:int a[5] = {1,2,3,4,5};int a[ ] = {1,2,3};//元素的个数由后面具体赋值的                 个数来决定

         易错******:

                1、int a[5];a[5] = {1,2,3,4,5}; //error

                2、int a[5];a = {1,2,3,4,5};//error

                3、int a[ ] = {0};//数组中只有一个元素,但是没有意义

       5、static、register、extern、auto他们各自的特点及作用 

              1、static:(1)修饰的变量存储在静态区,既可以修饰局部变量也可以修饰全局变量

                                (2)static修饰局部变量,延长了局部变量的生命周期,如果局部变量没有初                                            始化,其值0,如果初始化只会被初始化一次。

                                (3)static修饰全局变量,只能在本文件内使用(限制了全局变量的作用域)

              2、register:修饰局部变量,存储在寄存器中,建议将变量存储在寄存器中,可以提高程                                   序的运行速度,最终是否存储在寄存器中,取决于编译器,如果没有寄存                                          器,就存在栈区。

              3、extern:修饰全局变量,存储在静态区。

              4、auto:修饰局部变量,存储在栈区。

    6、局部变量能否和全局变量重名?

           能,局部会屏蔽全局。局部变量可以与全局变量同名,在函数内引用这个变量时,会用到            名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个            同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用            域就在那个循环体内。
 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值