C语言(字符串,转义字符,关键字)

 一、字符串

1、什么是字符串

字符:‘a’ ‘@’

字符串:“abc” “hello  world”

这种由双引号引起来的一串字符称为字符串字面值,或者简称字符串。
注:字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。
 

 2、举个例子

#include<stdio.h>
#include<string.h> //strlen函数的头文件
int main()
{
char arr1[] = "abc";  
char arr2[] = { 'a', 'b', 'c',};
printf("%d\n", strlen(arr1));  //输出3
printf("%d\n", strlen(arr2));  //输出随机值
printf("%s\n",arr1);
printf("%s\n",arr2);
return 0;
}

 这样写的话打印结果会完全不一样,打印结果如图: 

 为什么第二个arr2abc后面会打印出这么多文字呢?

这是因为arr1中字符串abc后面隐藏一个\0结束标志,而arr2中是三个字符没有\0,因此要它停下来需要往后寻找,所以产生随机值。如何修改呢,就是要在后面添加一个\0,来表示结束位。

#include<stdio.h>
#include<string.h>
int main()
{
	char arr1[] = "abc";
	char arr2[] = { 'a', 'b', 'c', };
	char arr3[] = { 'a','b','c','\0'};
	printf("%d\n", strlen(arr1));
	printf("%d\n", strlen(arr2));
	printf("%d\n", strlen(arr3));
	printf("%s\n", arr1);
	printf("%s\n", arr2);
	printf("%s\n", arr3);
	return 0;
}

结果如图:

注意:

1.strlen的作用是计算字符串在内存中所占的空间大小,需要#include<string.h>这个头文件去包含。上个文章用到了sizeof,sizeof是用来计算变量或者使用类型创建的变量的大小,单位是字节。
2.%s打印字符串,%c打印字符。

二、转义字符

1、什么是转义字符:

转义字符是指,用一些普通字符的组合来代替一些特殊字符,由于其组合改变了原来字符表示的含义,因此称为“转义”。
比如 C 语言中,用“\n”来表示换行,“\r”表示回车,“\t”表示跳格等等,它们本身只是一个反斜杠和一个字母,但是却被赋予了特殊的意义
我们先来看一下这一段代码打印的是什么:

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

这个打印的就是  :  c: code est.c     ‘\t’就是转义字符。

转义顾名思义就是转变意思。上述实例\c、因为c本身不是转义字符,所以输出本身;\t代表水平制表符,所以不输出c:\code\test.c

printf("(hehe\?\?)");                   //打印(hehe??)
printf("%c",'\'');                      //打印'
printf("%s","\"");                      //打印"
printf("c:\\test\\104\\test.c");        //打印c:\test\104\test.c
printf("\a\a\a\a");                     //电脑蜂鸣
printf("%c\n", '\130');                 //8进制的130转化成十进制数88作为ASCLL值所对应的符号:X
printf("%c\n", '\x40');                 //16进制的40转化成十进制数64作为ASCLL值所对应的符号: @

2、看一道计算题:

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

 该程序输出什么呢?

  输出14  分别为是:c,:,\t,e,s,t,\62,8,\t,e,s,t,.,c

注意:1、8进制没有8

           2、转义字符整体算做一个字符。

\ddd: ddd表示1~3个八进制的数字 如:\130 x

\xdd: dd表示2个十六进制数字       如:\x40 @  其他转义字符就不一一列举了

三、关键字

关键字有很多,我就举出常用的几个:

1关键字register

(1)拓展

      在介绍关键字 register 之前,我们先了解一下计算机中数据的存储,计算机的储存单元为:寄存器——>内存——>硬盘,在计算机中为了适配CPU的处理速度出现了寄存器,在计算机的存储单元中,寄存器的读写速度是最快的。我们现在需要了解的是:CPU 并不会直接和每⼀种存储器设备直接打交道,而是每⼀种存储器设备只和它相邻的存储器设备打交道。当然了,话说回来,我们现在只需要知道在计算机的存储单元中,寄存器的读写速度是最快的。

(2)关键字register的简单使用

       现在我们已经知道寄存器的读写速度是非常快的,因此当我们想要处理大量且频繁被使用的数据时,就可以将其放到寄存器中,从而提高处理效率。例如下面代码:

#include<stdio.h>
int main()
{
   //假设num被频繁的使用
   register int num=10000;//将num放到寄存器中,提升效率 
   return 0;
}

2、关键字typedef 

   typedef,顾名思义就是类型重定义的意思,即把一个类型的名字定义成一个新名字,当需要多次输入一个相同类型时,typedef提供了很好的便携性。

typedef unsigned int unit;  //我们通过重命名,将unsigned int命名为unit
int main()
{
	unsigned int num1 = 10;
	unit num2 = 20;
  //num1与num2类型一样
	return 0;
}

unsigned int,是无符号整型的意思。unsigned的取值范围在0-2^32。不能表示负数。每一种整型(int short long longlong)都有无符号(unsigned)和有符号(signed)两种类型,在一般情况下的整型变量都是有符号的,如果需声明无符号的话就会在类型前加上unsigned。

3关键字static

在c语言中:static是修饰变量和函数的,它主要三种使用形式:

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

void test()
{
	int a = 1;
	++a;
	printf("%d ", a);
}
int main()
{
	int i = 0;
	while (i < 5)
	{
		test();
		i++;
	}
	return 0;
}

这个的输出结果是:2 2 2 2 2

void test()
{
	static int a = 1;
	++a;
	printf("%d ", a);
}
int main()
{
	int i = 0;
	while (i < 5)
	{
		test();
		i++;
	}
	return 0;
}

         这个的输出结果是 2 3 4 5 6,为什么int前面加上了static输出结果不一样了呢,这里就引出了static修饰局部变量的作用:

          我们现在要说一下局部变量生命周期是什么:从进入作用域生命周期开始,出作用域生命周期结束。因此,程序1每次调用test函数都要经历变量的创建和销毁,所以每次打印出a的值都是2(1+1)。而对于程序2,test函数中的a变量被static修饰,而static关键字的作用是改变局部变量的生命周期。也就是说变量a的生命周期不在局限在test函数内部,而是整个程序,因此调用test函数a变量只创建一次,在程序结束时才会销毁,因此循环五次输出2,3,4,5,6

结论:普通的局部变量是存储在栈区的,被static修饰的变量是存储在静态区的,static修饰局部变量改变了变量的生命周期,让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。(本质上:改变了变量的储存类型)
  
(2)修饰全局变量——称为静态全局变量

我们已知全局变量的作用域是整个工程,调整整个工程中任何地方都能使用:

  但是当我们用static关键字修饰全局变量,使得这个全局变量只能在本源文件中使用,在其他源文件中使用就会报错:

 结论:一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件内使用,这个全局变量只能在自己的.c文件中看到,其他源文件看不到了(本质上:是因为全局变量具有外部连接属性,被static修饰后就变成了内部连接属性)。

(3)修饰函数——称为静态函数

其实static修饰全局变量和修饰函数原理的原理相同,详见下图:

在int前面加上static,再来运行,就会报错: 

 结论:一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用(本质上:static是将函数的外部链接属性变成了内部链接属性)

 static就是使自己创建的全局变量与函数只能使自己看到与调用,不希望其他人调用。

这就是我这几天总结的知识,希望对大家有帮助。

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码小陈的编程之旅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值