2.变量的作用域和常量

变量的作用域1

按作用域划分:变量分局部变量和全局变量

局部变量

处于代码块2中的变量就是局部变量,生命周期伊始于左半括号开始直到右半括号结束变量生命周期结束空间被释放

全局变量生命周期伴随整个程序起始到结束


4种常量
字面常量
  1. 浮点类型字面常量3

    3.14

  2. 带f的浮点数,类型是float4

    3.14f

  3. 整数字面常量5

    1000

  4. 字符字面常量6

    ‘c’

  5. 字符串字面常量

    “hello”

const 修饰的常变量

定义举例:

const int var = 998;

被const修饰的变量的值不能赋值改值,但是可以通过指针改变如下:

#include<stdio.h> 
int main() {
	const int a = 998;
	int* p = &a;
	*p = 100;
	printf("%d", a);
	return 0;
}

扩展:const修饰指针常见的三种情况

  1. const位于*前面

    const int* ptr;(等价于:int const * ptr;)

ptr指针变量指向的内存空间,其值不能被修改

  1. const位于*后面

    int* const ptr;

ptr不能重新指向新的变量空间

  1. const同时位于*前面和后面

    const int* const ptr;

ptr指针变量指向的内存空间,其值不能被修改且ptr不能重新指向新的变量空间

#define 定义的标识符常量

#define关键字是特别实用的一个C语法特征,宏替换以及宏定义类似函数功能

如果一个数字在当前源码中出现次数很多,那么可以用宏定义来表示,以后对代码中大量出现的变量进行修改也有极大的方便

枚举常量

实用enum关键字以及{}进行定义

例子:

enum sex{
    male,
    falmale,
    secret
};

枚举的元素默认都是int类型的,枚举的第一个元素默认从0开始,也可以对单个元素进行赋值进行初始化

总结:只有define的常量和枚举常量可以用于初始化数组元素个数

define的常量初始化数组元素个数

#include <stdio.h>
#define NUM 8
int main() {
	int arr[NUM] = {1, 2, 3, 4};
	printf("%d\n", *(arr+2));
	printf("%d\n", sizeof(arr)/4);
	return 0;
}

const修饰的变量严格意义上讲应该叫做常变量,是不能用于声明数组的元素个数

const int num = 10;
int arr[num];

以上代码会报错,原因是:num的值是在运行阶段才有值的,而在编译阶段无法获取值的,因此编译阶段编译器就不知道给数组开辟多大的空间

枚举常量是可以用于数组元素个数的初始化的

#include <stdio.h>
enum {
	a = 6,
	b
};
int main() {
	int arr[a] = { 1, 2, 3, 4 };
	printf("%d\n", arr[3]);
	return 0;
}

字符数组

两种定义方式

char arr1[]={'a', 'b', 'c'};

char arr2[]="abc";

以上两种初始化是有3点区别:

  1. arr2声明的字符数组有四个元素,因为字符串字面常量结尾默认有一个’\0’结束标志符

  2. sizeof(arr1)=3,sizeof(arr2)=4

  3. strlen(arr1)的结果是随机值,strlen(arr2)=3 7

数组部分初始化:

char arrChar[6] = {'1', '2', '3'};

部分初始化的数组,未给初始值的元素默认是0

数组如果初始化,可以不指定数组的大小

int arrInt[] = {'1', '2', '3'};

总结:C语言中并没有字符串这种变量类型,我们平时使用的实际是字符数组,由于是第二种初始化方式因此结尾都会有结束标志’\0’,使用字符数组的名字去打印字符串也是打印到结束标志’\0’为止,给人一种本身就是字符串的错觉,其实质上是数组


转义字符

反斜杠\用于与普通字符组合表示特殊字符

注意以下组合字符都表示一个字符,注意表示一个反斜杠\要使用’\’

特殊字符释义
\?在书写连续多个问号时使用,防止他们被解析成三字母词
\’用于表示字符常量’
\"用于表示一个字符串内部的双引号
\\用于表示一个反斜杠,防止它被解释为一个转义序列符。
\a警告字符,蜂鸣
\b退格符
\f进纸符
\n换行
\r回车
\t水平制表符
\v垂直制表符
\ddd ddd表示1~3个八进制的数字 8。 如: \130
\xdd dd表示1~2个十六进制数字 9。 如: \x30 (大写X代表16进制的字母大写)

示例:

strlen("\618") -->结果是2

’\61’是一个字符

strlen("\6131") -->结果是2

’\613’是一个字符

strlen("\x61") -->结果是1

strlen("\xff") -->结果是1

strlen("\xf") -->结果是1

strlen("\xfg") -->结果是2

’\xf’是一个字符


C语言两种注释风格:

单行注释(C++):

//xxxxxxxx内容

多行注释(不支持嵌套,前半注释符只与后文第一个后半注释符闭合):

/* xxxxxxxx内容 */


  1. 变量只能在其生命周期内访问 ↩︎

  2. 使用{}括起来的一个部分就是一个代码块 ↩︎

  3. 默认是double类型 ↩︎

  4. float和double的精度是不同的,float32位,double64位 ↩︎

  5. 默认是int类型 ↩︎

  6. 默认是char类型, 计算机起源于欧美国家因此最早的字符集是ASCII,除此之外还有兼容各个国家字符的字符编码unicode以及各国自己规定的字符集 ↩︎

  7. strlen函数位于stdlib头文件中,作用是计算字符串长度 ↩︎

  8. 注意d的取值 < 8 ↩︎

  9. 注意d的取值 <= f ↩︎

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值