C (第三章 常量变量)

没有什么比时间更具有说服力了, 因为时间是无需通知我们就可以改变一切. --余华<活着>

3. 常量变量

3.1 常量
3.1.1 字面常量

例如: 3.14

3.1.2 const定义的常量

(1) C语言中, const修饰的只读变量具有不可改变性, 这个变量具有常属性, 并且它任然占用内存空间;
(2) 在C++语言中, const修饰的标识符就是常量;
(3) 例如: const float pai = 3.14f;

3.1.3 #define定义的标识符常量 (宏)
#define MAX 100;
3.1.4 枚举常量 (enumeration)
enum {Name, Male, Female};
3.2 变量
3.2.1 变量的命名规则

必须以字母或者下划线开头, 后面可以跟若干个字母, 数字, 下划线, 但不能有其他字符.

3.2.2 变量的分类

(1) 全局变量: 变量出现在所有代码块之外;
(2) 局部变量: 变量出现在局部范围内;
(3) static

  • 修饰全局变量: 变为静态全局变量, 改变了变量的链接属性, 存储在内存中的静态区, 在声明它的文件之外是不可见得的, 仅在当前源文件可见;
  • 修饰局部变量: 其生命周期延长, 由原来的栈中存放改为静态存储区, 作用域仍为局部作用域.
3.2.3 变量的初始化和赋值

初始化: 创建变量的同时, 给变量赋初值, 开辟空间默认的值就是初始化的值.
赋值: 开辟空间刚开始的随机值.

3.2.4 变量在内存中的存储位置

在这里插入图片描述

内核空间 (高地址)
用户不能读写.
栈区 (向下增长)
(1) 编译器自动分配内存并释放, 栈区主要存放运行函数而分配的局部变量, 函数参数, 返回数据, 返回地址等;
(2) 在Windoiws下, 由编译器决定栈的大小 (一般为1M/-2M), 如果申请的空间超过栈的剩余空间时, 将提示overflow, 因此能从栈获得的空间较小, 但其运行速率比堆快.
内存映射段
文件映射, 动态库, 匿名映射;
堆区 (向上增长)
(1) 动态开辟内存, malloc, calloc, realloc, free;
(2) 堆的大小受限于计算机系统中有效的虚拟内存, 堆获得的内存空间比较灵活,也比较大;
(3) 一般由程序员分配释放, 若程序员不释放, 程序结束时可能由OS回收, 分配方式类似于链表.
全局区(数据段, 静态区)
存放全局变量, 静态数据, 程序结束后由系统释放.
程序代码区 (代码段)
存放函数体(类成员函数和全局函数)的二进制代码, 可执行的代码/只读常量.

3.2.5 变量的作用域和生命周期
#define _CRT_SECURE_NO_WARNINGS_
#include <stdio.h>
#include <stdlib.h>
	int a = 10;           // 全局变量
int mian(){
	int num1 = 0;         // 局部变量
	int num2 = 0;         // 局部变量
	printf("请输入两个整数: ");  
	scanf("%d %d,&num1, &num2");
	int result = num1 + num2;
	printf("result=%d\n",result);
	system("pause");            
	return 0;
}
区别: 1.对于局部变量来说, 作用域为当前代码块, 生变周期也是当前代码块;
     2.对于全局变量来说, 作用域为整个工程, 生命周期是整个程序的运行过程.

作用域
通常来说, 一段代码中所用到的名字并不总是有效, 可用的, 而是限定这个名字的可用性的代码范围就是这个名字的作用域.

  • 局部变量: 就是变量所在的作用域;
  • 全局变量: 整个工程.

生命周期
指变量的创建到变量的销毁之间的一个时间段.

  • 局部变量: 进入作用域生命周期开始, 出作用域生命周期结束.
  • 全局变量: 整个程序的生命周期.
3.3 字符串+转义字符+注释
3.3.1 字符串

这种由双引号 (Double Quote) 引起来的一串字符称为字符串字面值 (String Literal) , 或者简称字符串, 字符串的结束标志是一个 \0 转义字符.

3.3.2 转义字符
(1) \? 在书写连续多个问号时使用, 防止他们被解析成三字母词;
(2) \' 用于表示字符串常量;
(3) \''用于表示一个字符串内部的双引号;
(4) \\ 用于表示一个反斜杠, 防止它被解析成一个转义序列符;
(5) \a 警告字符, 蜂鸣;
(6) \b 退格符;
(7) \f 进纸符;
(8) \n 换行;
(9) \r 回车;
(10) \t 水平制表符;
(11) \v 垂直制表符;
(12) \ddd ddd表示一个1-3个八进制的数字, 例如: \130X;
(13) \xddd ddd表示一个1-3个十六进制数字, 例如: \x036;

#include <stdio.h>
#include <string.h>
int main(){
	printf("%d\n",strlen("abcdef"));         // 求字符串长度
	printf("%d\n",("c:\test\328\test.c"));   // \32被解析成一个转义字符
	printf("My name is \"Yangjie\"");		 // \"YangJie\"  YangJie
	system(pause);
	return 0;
}
3.3.3 注释
  • 注释的作用
    (1) 代码中不需要的部分可以删除, 也可以注释掉;
    (2) 代码中的有些代码比较难懂, 可以加一些注释, 方便理解;
  • 注释的基本使用
VS多行代码注释: ctrl + k ctrl + c    取消注释  ctrl + k  ctrl + u;
(1) /* ... */
(2) // ...
(3) #if 0(1)
	#endif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值