当前位置:网站首页>C语言-入门-基础-语法-[变量,常亮,作用域](五)

C语言-入门-基础-语法-[变量,常亮,作用域](五)

2022-07-04 08:46:00 胡安民

什么是常量?

常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。
常量可以是任何的基本数据类型,比如整数常量、浮点常量、字符常量,或字符串字面值,也有枚举常量。常量就像是常规的变量,只不过常量的值在定义后不能进行修改。

就好比现实生活中生男生女一样, 生下来是男孩永远都是男孩, 生下来是女孩就永远都是女孩, 所以
性别就是现实生活中常量的一种体现

常量的类型

整数常量

整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。

整数常量也可以带一个后缀,后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),L 表示长整数(long)。后缀可以是大写,也可以是小写,U 和 L 的顺序任意。

下面列举几个整数常量的实例:

212         /* 合法的 */
215u        /* 合法的 */
0xFeeL      /* 合法的 */
078         /* 非法的:8 不是八进制的数字 */
032UU       /* 非法的:不能重复后缀 */

以下是各种类型的整数常量的实例:

85         /* 十进制 */
0213       /* 八进制 */
0x4b       /* 十六进制 */
30         /* 整数 */
30u        /* 无符号整数 */
30l        /* 长整数 */
30ul       /* 无符号长整数 */

浮点常量

浮点常量由整数部分、小数点、小数部分和指数部分组成。您可以使用小数形式或者指数形式来表示浮点常量。

当使用小数形式表示时,必须包含小数点、指数,或同时包含两者。当使用指数形式表示时,必须包含整数部分、小数部分,或同时包含两者。带符号的指数是用 e 或 E 引入的。

下面列举几个浮点常量的实例:

3.14159       /* 合法的 */
314159E-5L    /* 合法的 */
510E          /* 非法的:不完整的指数 */
210f          /* 非法的:没有小数或指数 */
.e55          /* 非法的:缺少整数或分数 */

字符常量

  • 字符型常量都是用’'(单引号)括起来的。例如:‘a’、‘b’、‘c’
  • 字符常量的单引号中只能有一个字符
  • 特殊情况: 如果是转义字符,单引号中可以有两个字符。例如:‘\n’、‘\t’

字符串常量

  • 字符型常量都是用""(双引号)括起来的。例如:“a”、“abc”、“lnj”
  • 系统会自动在字符串常量的末尾加一个字符’\0’作为字符串结束标志

定义常量

在 C 中,有两种简单的定义常量的方式:

  • 使用 #define 预处理器。
  • 使用 const 关键字。

请注意,把常量定义为大写字母形式,是一个很好的编程实践。

使用 #define 预处理器定义常量的形式:#define identifier value

#include <stdio.h>

#define LENGTH 10 
#define WIDTH 5
#define NEWLINE '\n'

int main()
{
    

   int area;  
  
   area = LENGTH * WIDTH;
   printf("value of area : %d", area);
   printf("%c", NEWLINE);

   return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

value of area : 50

您还可以使用 const 前缀声明指定类型的常量:const type variable = value; 具体请看下面的实例:

#include <stdio.h>
const int  LENGTH = 10;
const int  WIDTH  = 5;
const char NEWLINE = '\n';
int main()
{
    
    int area;
    area = LENGTH * WIDTH;
    printf("value of area : %d", area);
    printf("%c", NEWLINE);

    return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

value of area : 50

#define Vs const

1.编译器处理方式

  • define – 在预处理阶段进行替换
  • const – 在编译时确定其值

2.类型检查

  • define – 无类型,不进行类型安全检查,可能会产生意想不到的错误
  • const – 有数据类型,编译时会进行类型检查

3.内存空间

  • define – 不分配内存,给出的是立即数,有多少次使用就进行多少次替换,在内存中会有多个拷贝,消耗内存大
  • const – 在静态存储区中分配空间,在程序运行过程中内存中只有一个拷贝

4.调试

  • define是不能进行调试的,因为在预编译阶段就已经替换掉了。
  • const常量可以进行调试的。

我这里只是想强调define的作用非常强大,虽然它没有类型检测,不能调试,还要考虑边界效应,但是正因为没有类型检测,预编译是就完成,才使得它的使用更加灵活,功能更加强大,如果我们可以善用define,往往可以发挥到意想不到的效果。

什么是变量?

"量"表示数据。变量,则表示一些不固定的数据,也就是可以改变的数据就好比现实生活中人的身高、体重一样,随着年龄的增长会不断发生改变,所以身高、体重就是现实生活中变量的一种体现,还有就是现实生活中超市的储物格一样,同一个格子在不同时期不同人使用,格子中存储的物品是可以变化的。张三使用这个格子的时候里面放的可能是尿不湿,但是李四使用这个格子的时候里面放的可能是面包

如何定义变量

为什么要定义变量?, 任何变量在使用之前,必须先进行定义,只有定义了变量才会分配存储空间,才有空间存储数

为什么要限定类型?, 用来约束变量所存放数据的类型。一旦给变量指明了类型,那么这个变量就只能存储这种类型的数据据 ,内存空间极其有限,不同类型的变量占用不同大小的存储空间

为什么要指定变量名称?, 存储数据的空间对于我们没有任何意义,我们需要的是空间中存储的值, 只有,有了名称,我们才能获取到空间中的值, 就好比,你叫张三,他叫李四, 如果没有名称那么如何让对方知道我们是在和他说话,难道就喂喂喂, 在商场人多的情况下,你试试,看看回头率

格式1:变量类型 变量名称;

int a; 
float b; 
char ch;

格式2:变量类型 变量名称,变量名称...; 多个变量之间用逗号(,)号隔开

int a,b,c;

变量名属于标识符,所以必须严格遵守标识符的命名原则

如何使用变量?

在C语言中,利用=号往变量里面存储数据, 我们称之为给变量赋值

int value;
value = 998; // 赋值

注意:
这里的=号,并不是数学中的“相等”,而是C语言中的赋威值运算符,作用是将右边的整型常量998赋值给左边的整型变量value ,赋值的时候,=号的左侧必须是变量,为了方便阅读代码,习惯在=的两侧各加上一个空格

变量的初始化

C语言中,变量的第一次赋值,我们称为“初始化 ,初始化的两种形式:
先定义后初始化

int value;
value=998//初始化

定义时同时初始化

int a = 10int b = 4,c=2

如何修改变量值?

多次赋值即可,每次赋值都会覆盖原来的值

int i = 10;
i = 20; // 修改变量的值

变量之间的值传递

可以将一个变量存储的值赋值给另一个变量

int a = 10; 
int b = a; // 相当于把a中存储的10拷贝了一份给b

如何查看变量的值?

使用printf输出一个或多个变量的值

int a = 10, c = 11; 
printf("a=%d, c=%d", a, c);

输出其它类型变量的值

double height 1.75char blood 'A';
printf("hei ght=%.2f,血型是%c",height,blood);

变量的作用域(重要)

任何一种编程中,作用域是程序中定义的变量所存在的区域,超过该区域变量就不能被访问。 C语言中所有变量都有自己的作用域, 变量定义的位置不同,其作用域也不同, 按照作用域的范围可分为两种, 即局部变量和全局变量

局部变量

局部变量也称为内部变量,局部变量是在代码块内定义的, 其作用域仅限于代码块内, 离开该代码块后无法使用 ,我们来看几个案例:

int main(){
     
	int i = 998; // 作用域开始 
	return 0;// 作用域结束 
}

在这里插入图片描述
在这里插入图片描述

全局变量

全局变量也称为外部变量,它是在代码块外部定义的变量

int i =666;
int main(){
    
    printf("i = %d\n",i);//可以使用
    return 0;
}
int call(){
    
    printf("i = %d\n",i);//可以使用
    return 0;
}

注意: 同一作用域范围内不能有相同名称的变量

在这里插入图片描述
在这里插入图片描述
不同作用域范围内可以有相同名称的变量
在这里插入图片描述
在这里插入图片描述

变量内存分析

字节和地址

  • 为了更好地理解变量在内存中的存储细节,先来认识一下内存中的“字节”和“地址”
  • 每一个小格子代表一个字节
  • 每个字节都有自己的内存地址
  • 内存地址是连续的

在这里插入图片描述
一个变量所占用的存储空间,和定义变量时声明的类型以及当前编译环境有关
在这里插入图片描述
根据定义变量时声明的类型和当前编译环境确定需要开辟多大存储空间, 开辟时从内存地址大的开始开辟(内存寻址从大到小), 将数据保存到已经开辟好的对应内存空间中
在这里插入图片描述
在这里插入图片描述
先不要着急, 刚开始接触C语言, 我先了解这么多就够了. 后面会再次更深入的讲解存储的各种细
节。

在这里插入图片描述

点赞 -收藏-关注-便于以后复习和收到最新内容
有其他问题在评论区讨论-或者私信我-收到会在第一时间回复
感谢,配合,希望我的努力对你有帮助^_^

免责声明:本文部分素材来源于网络,版权归原创者所有,如存在文章/图片/音视频等使用不当的情况,请随时私信联系我。
原网站

版权声明
本文为[胡安民]所创,转载请带上原文链接,感谢
https://huanmin.blog.csdn.net/article/details/125583867