【C语言】字符串,转义字符,关键字

一、字符串

什么是字符串?

字符:‘a’ ‘!’
字符串:“hello world”
这种双引号引起来的一串字符称为字符串字面值,简称字符串。

注:字符串的结束标志是一个 '\0 '的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。

试试以下代码

#include<stdio.h>
int main()
{
	char arr1[] = "hello";
	char arr2[] = { 'h', 'e', 'l', 'l', 'o' };
	char arr3[] = { 'h', 'e', 'l', 'l', 'o', '\0' };
	printf("%s\n", arr1);
	printf("%s\n", arr2);
	printf("%s\n", arr3);
	return 0;
}

打印结果会是什么呢?

在这里插入图片描述

可以看到,arr1和arr3的打印结果相同,而arr2后面会多出一些字。注意上面的红字提示哦,此刻\0的重要性就突显出来了。

通过代码可以看出,arr3比arr2多了一个字符\0的结束标志,所以arr2需要往后寻找,直到找到一个\0停止,所以会产生随机值打印乱码。如何修改呢,arr2需要在后面添加一个\0,来表示结束位。

而arr1在定义字符串时是默认结尾带\0的,所以正常输出字符串。

二、转义字符

转义字符是指,用一些普通字符的组合来代替一些特殊字符,由于其组合改变了原来字符表示的含义,因此称为“转义”。简单来说就是在一些字符前加“\” 使它具有其他意义和功能。

先看下这段代码的打印结果会是什么?

#include<stdio.h>
int main()
{
	printf("c:\code\test.c\n");
	return 0;
}

打印结果
在这里插入图片描述
这里出现了两个转义字符 \t (水平制表符相当于4个空格)\n(换行符),\c由于c本身不是转义字符,所以输出本身不会输出\

转义字符表

在这里插入图片描述

转义字符\'——用于表示字符常量'

打印单引号'的时候会用到

printf("%c", '\'');

转义字符\"——用于表示一个字符串内部的双引号

printf("%s\n", "\"hello");	//打印 "hello
printf("%s\n", "\"hello\"");//打印 “hello”

转义字符\"——用于表示一个反斜杠,防止它被解释为一个转义序列符

拿上面那道题来说,若要打印出 c:\code\test.c,应当这样写

#include<stdio.h>
int main()
{
	printf("c:\\code\\test.c");
	return 0;
}

转义字符\a——警告字符,蜂鸣

可以自己试下,电脑会发出警告音

转义字符\b——退格符

\b前面的字符会被删除

printf("he\bllo");	//打印hllo

转义字符\n——换行符

不必多说,通常用于末尾用来换行

转义字符\ddd——ddd表示1~3个八进制的数字 如:\130->x

printf("%c\n", '\101');	//打印A
printf("%c\n", '\176');	//打印~

八进制数101转化为十进制是65,对应的ASCII码表中的字母A
八进制数176转化为十进制是126,对应的ASCII码表中的符号~

转义字符\ddd——dd表示两个十六进制数字 如:\x30->0

printf("%c\n", '\x30');	//打印字符0

与上面类似,十六进制转为化十进制的ASCII码值再打印对应符号。

三、关键字

C语言提供了丰富的关键字,这些关键字都是语言本身预先设定好的,用户自己是不能创造关键字的

常见关键字有:

auto break case char const continue default do double else enum
extern float for goto if int long register return short signed
sizeof static struct switch typedef union unsigned void volatile while

下面先介绍常用的几个关键字

1.关键字typedef

typedef 是类型定义,可以理解为类型重命名。也叫做起小名,起到简化作用。

比如需要大量使用unsigned int类型

typedef unsigned int uint;//给unsigned int 起个小名叫 uint
uint num = 10;	//等价于unsigned int num = 10

2.关键字static

在C语言中,static是用来修饰变量和函数的,主要有三种用法:

(1)修饰局部变量——称为静态局部变量

这段代码会输出什么?会打印10个1

void test()
{
	int i = 0;
	i++;
	printf("%d ", i);
}
int main()
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		test();
	}
	return 0;
}

而这段代码又会输出什么?会打印1到10

void test()
{
	static int i = 0;
	i++;
	printf("%d ", i);
}
int main()
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		test();
	}
	return 0;
}

对比这两段代码的效果理解static修饰局部变量的意义。

static修饰局部变量时,实际改变的是变量的存储位置,本来一个局部变量是放在栈区的,被static修饰后存储在静态区,局部变量就变成了静态的局部变量,出了局部的范围,不会销毁,下一次进入函数依然存在。相当于证明周期延长,而作用域并没有发生变化。

总结:
static修饰局部变量改变了变量的生命周期
让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。

(2)修饰全局变量——称为静态全局变量
我们知道全局变量的范围是整个工程项目,具有外部链接属性,在该工程内其他文件都可以使用
在这里插入图片描述
但是当我们用static关键字修饰全局变量,这个全局变量的外部链接属性会变为内部链接属性,使得这个全局变量只能在本源文件中使用,在其他源文件中使用就会出现连接型错误。
这里也用到了extern关键字
在这里插入图片描述
总结:一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件内使用

(3)修饰函数——称为静态函数
static修饰函数和修饰全局变量的原理相同
在这里插入图片描述在这里插入图片描述
总结:一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。

3.关键字register

什么是寄存器?
寄存器是CPU内部重要的数据存储资源,主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间,也就是说CPU操作寄存器比操作内存快(寄存器是直接存取,而内存是寻址存取)
在这里插入图片描述
寄存器的存在是为了在硬件层面上,提高计算机的运算效率。这样通过预先缓存,CUP就不需要每次都从内存里读取数据了。

register的作用

如果一个变量用register来修饰,则意味着该变量会作为一个寄存器变量,让该变量的访问速度达到最快。例如,一个程序逻辑中有一个很大的循环,循环中有几个变量要频繁进行操作,这些变量可以声明为register类型。

register 只能修饰局部变量,其作用是尽量将所修饰的局部变量,放入CPU寄存器中,从而提高它的读取效率。
在这里插入图片描述

尽量在大量、频繁操作时使用寄存器变量,且声明的变量个数应该尽量少。
不过目前的编译器已经很智能,能够进行代码优化,很少有人使用register了。

  • 30
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值