C语言-Day2-初识作用域/常量的定义/字符串/转义字符/注释


一、作用域:

变量的作用域指某一变量在程序中可以被访问的一定区域。在作用域之外,该变量将不可被访问。
位于一对花括号内的语句被称为一个代码块。代码块内的变量的作用域为该花括号范围。如下面的语句在编译时将报错。因为a被定义的范围是在内部的花括号内,在此花括号外,变量a无法被访问。

int main()
{
	{
		int a = 10;
	}
	printf("%d",a);
}

全局变量:定义在花括号外,即int main(){}这个花括号外的变量,称为全局变量,该变量在整个工程中都可以被访问。
局部变量:在花括号内,只在它作用域内可以被访问的变量。

extern关键字:

有一个常见的问题,就是如果想在不同的.c文件中使用同一个变量并传递其值,可以使用全局变量。但前提是需要在主函数的.c文件中使用extern关键字声明。
如下面的这个片段是在含有主函数的.c文件中:

extern int g_val;
int main()
{
	printf("&d",g_val);
}

下面这个片段则是在其他需要使用g_val这个变量的.c文件中,在该文件中给其赋值,在上面的程序中将打印出100。

int g_val = 100;

二、生命周期:

变量的创建和销毁之间的时间段称为生命周期。

  1. 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
  2. 全局变量的生命周期是:整个程序的生命周期。

三、常量:

C语言中的常量和变量的定义的形式有所差异。
C语言中的常量分为以下以下几种:
1.字面常量
2.const 修饰的常变量
3.#define 定义的标识符常量
4.枚举常量

#include <stdio.h>
//枚举举例
enum Sex
{
 MALE,
 FEMALE,
 SECRET
};
//括号中的MALE,FEMALE,SECRET是枚举常量
int main()
{
    //字面常量演示
    3.14;//字面常量
    1000;//字面常量
    
    //const 修饰的常变量
    const float pai = 3.14;   //这里的pai是const修饰的常变量
   
    //#define的标识符常量 演示
 	#define MAX 100
    printf("max = %d\n", MAX);
    
    //枚举常量演示
    printf("%d\n", MALE);
    printf("%d\n", FEMALE);
    printf("%d\n", SECRET);

	return 0}

const 关键字修饰的变量将具有常属性,其值不能被改变,一开始声明的时候是多少就是多少。比如上面代码中,pai的值在整个程序执行过程中都将保持3.14,如果你想要更改pai的值,如pai = 100;这个语句将会报错。
枚举常量的关键字为enum,该声明与结构体很相似。枚举常量的值是从0开始的,上面代码最后输出MALE,FEMALE,SECRET的值为0,1,2。如果一开始在enum中给MALE赋值为2的话,则输出以此为2,3,4。


四、字符串+转义字符+注释:

(一)字符串

1.字符串就是零个或多个字符,并且以一个NUL字节结尾,即“\0”结尾。字符串由双引号括起来“”,字符由单引号‘’括起来。
2.字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。
3.头文件“string.h”包含了使用字符串函数所需的原型和声明,最好能引用它。
4.打印字符串:printf("%s",“abc”);
5.strlen()函数可以返回某字符串的长度,当然,是不包括\0的长度,如“abc”使用strlen(“abc”);返回的长度就是3。

代码举例:可以看到,因为arr2中没有字符串的结束标志\0,因此编译器或取其内容和长度时,除了访问’a’‘b’'c’3个字符之外,又继续向后访问,而之后的地址不可知,因此内容出现乱码,长度出现随机值15,而非3。在添加结束标志\0后的arr3中,则无此现象。
在这里插入图片描述

(二)转义字符

1.转义字符:

字符集(Character Set)为每个字符分配了唯一的编号,我们不妨将它称为编码值。在C语言中,一个字符除了可以用它的实体(也就是真正的字符)表示,还可以用编码值表示。这种使用编码值来间接地表示字符的方式称为转义字符(Escape Character)。

转义字符以\或者\x开头,以\开头表示后跟八进制形式的编码值,以\x开头表示后跟十六进制形式的编码值。对于转义字符来说,只能使用八进制或者十六进制。

字符 1、2、3、a、b、c 对应的 ASCII 码的八进制形式分别是 61、62、63、141、142、143,十六进制形式分别是 31、32、33、61、62、63。下面的例子演示了转义字符的用法:

char a = '\61';  //字符1
char b = '\141';  //字符a
char c = '\x31';  //字符1
char d = '\x61';  //字符a

在这里插入图片描述

2.常用转义字符表:

在这里插入图片描述

3.转义字符的长度:

注意,转义字符也是有长度的,但字符串的结束标志\0却不算做长度。
\t这样的算一个字符长度。

//程序输出什么?
#include <stdio.h>
int main()
{
    // \62被解析成一个转义字符
    printf("%d\n", strlen("c:\test\628\test.c"));
    return 0;
}

在上面的代码块中,程序输出的值为14.原因是所有转义字符算作一个长度。\t \62 \t这三个转义字符算作3个长度。而8没有被包含进\628的原因是这是一个8进制转义字符,而8进制是不可能出现8的。

(三)注释

注释是用来解释复杂代码的。
//和/* */

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值