初始C语言(2)

紧接上一篇文章,初识C语言系列的第二个模块也是这个系列最后一篇博客来啦!

这篇文章主要是讲解一下字符串、转义字符以及C语言中的注释,然后大概介绍一下C语言常见的一些关键字,话不多说,让我们开始吧!

1.字符串

示例:"Hello,World!\n"

像上面这种双引号引起的一串字符称作字符串字面值,也叫它字符串。

字符串的结束标志是一个 \0 的转义字符,这个字符是存储在内存中的,并不会显示出来。strlen函数在计算字符串长度的时候就是以 \0 为结束标志,但不算作字符串内容。

这里引入一个新的知识,也就是strlen函数,它是一个用于计算字符串长度的函数,需要包含<string.h>的头文件。

调用格式:strlen(字符表达式);

它和前面所讲的sizeof不一样,sizeof是一个单目运算符,会把表达式的长度输出,单位是字节。

接下来我们就用sizeof 和 strlen来感受一下\0的存在。

代码如下:

#include<stdio.h>
#include<string.h>
int main()
{
	char ch1[] = "hello,world";
	printf("%d\n", strlen(ch1));
	printf("%d", sizeof(ch1));
	return 0;
}

这里是定义了一个名为ch1的字符数组,将"hello,world"存放到字符数组中,我们可以数一下,加上中间的逗号,一共有11个字符,接下来让我们来看一下运行结果。

运行结果:

681b0b56f0754802b9d6a6fda7378bb3.png

 可以看到,strlen函数的输出值是11,和我们数的11个字符是对的上的,而sizeof输出的值是12,多的这一个字符,就是那个我们无法看到的\0,sizeof将\0这个空字符也给计算进去。由此可以说明,字符串的结束标志是一个\0的转义字符。

2.转义字符

在讲转义字符前,我们先来写一段代码,打印"c:\code\test.c"

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

但是程序运行之后,结果却是这样:

be88ee7bf8db4c9a8a80bd2ea9059b4e.png

 可以看到 \t 消失了,这是怎么回事呢?

事实上,\t是一个转义字符,转义字符,顾名思义就是转变意思,也就是说,\t表示的意思不再是字符串"\t",而是另一个意思,具体的意思可以看下面的表格:

ea49e4a6c1cf442393971606c31f19a4.png

 转义字符大致就讲到这里啦,然后给大家留一道题:

#include<stdio.h>
#include<string.h>
int main()
{
	printf("%d\n", strlen("abcdef"));
	printf("%d", strlen("c:\test\628\test.c"));
	return 0;
}

上面的程序输出结果是什么呢,欢迎大家在评论区留下答案。

3.注释

注释有两种风格,一种是C语言风格的注释:/*xxxxxxxx*/

缺陷是无法嵌套注释,即/*xxxxxx/*xxxxx*/xxxxxx*/

一种是C++风格的注释://xxxxxxxxx

可注释一行也可多行注释

示例:

//C语言风格注释

/*
#include<stdio.h>
int main()
{
	printf("hello,world!");
	return 0;
}
*/


//C++风格注释

//#include<stdio.h>
//int main()
//{
//	printf("hello,world!");
//	return 0;
//}

4.关键字

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   

然后给大家介绍几个关键字,更多的以后再慢慢学习。

4.1 关键字typedef

typedef的作用是为现有类型创建其他的名字,即类型重命名。

示例:

//将unsigned int 重命名为un_int
typedef unsigned int un_int;
//此时unsigned int 和 un_int 是同一类型
int main()
{
	unsigned int num1 = 0;
	un_int num2 = 0;
	return 0;
}

4.2 关键字static

static有静态的意思,在C语言中,static是用来修饰变量和函数的。

修饰局部变量时,称为静态局部变量;

修饰全局变量时,称为静态全局变量;

修饰函数时,称为静态函数。

修饰局部变量

//代码1
#include <stdio.h> 
void test()
{
    int i = 0;
    i++;
    printf("%d ", i);
}
int main() {
    int i = 0;
    for (i = 0; i < 10; i++)
    {
        test();
    }
    return 0;
}
//代码1运行结果:1 1 1 1 1 1 1 1 1 1



//代码2
#include <stdio.h> 
void test()
{
    //static修饰局部变量 
    static int i = 0; 
    i++;
    printf("%d ", i);
}
int main()
{
    int i = 0;
    for (i = 0; i < 10; i++)
    {
        test();
    }
    return 0;
}

//代码2运行结果:1 2 3 4 5 6 7 8 9 10

通过代码1和代码2的运行结果比较,我们可以得出以下结论:static修饰局部变量改变了变量的生命周期,使得静态局部变量出了作用域依然存在,直到程序运行结束,静态局部变量的生命周期才结束。

修饰全局变量

首先我们在一个工程内创建两个源文件:add.c 和test.c

在add.c文件内定义一个全局变量,然后在test.c文件中使用这个全局变量。

代码实现如下:

//代码1
//add.c
int global = 100;

//test.c
int main()
{
	printf("%d\n", global);
	return 0;
}


//代码2
//add.c
static int global = 100;

//test.c
int main()
{
	printf("%d", global);
	return 0;
}

运行后我们发现,代码1可以正常打印出100,但代码2会提示连接性错误,由此我们可以看出,当一个全局变量被static修饰的时候,这个全局变量就只能在本源文件中使用,不能在其他源文件内使用。

修饰函数

同样,我们还是在一个工程内创建add.c和test.c两个源文件。

在add.c文件内定义一个函数,在test.c文件内调用我们定义的函数。

代码实现如下:

//代码1
//add.c
int Add(int x, int y)
{
	return x + y;
}

//test.c
#include<stdio.h>
int main()
{
	printf("%d", Add(2, 2));
	return 0;
}


//代码2
//add.c
static int Add(int x, int y)
{
	return x + y;
}

//test.c
#include<stdio.h>
int main()
{
	printf("%d", Add(2, 2));
	return 0;
}

运行程序后可以发现,代码1是可以正常运行的,即能够在test.c中调用在add.c定义的Add函数,而代码2会出现连接性错误,说明函数在被static修饰后,只能在本源文件内使用,不能在其他源文件被调用。

5.#define定义常量与宏

#define是C语言中的一个预处理命令,其中#表示这是一条预处理命令,define为 宏 定义命令,

具体使用如下:

//#define定义标识符常量
#define MIN 0

//#define定义宏
#define ADD(x,y) ((x)+(y))

#include<stdio.h>

int main()
{
	printf("%d\n", MIN);
	printf("%d\n", ADD(2, 3));
	return 0;
}

运行结果如下:

                ​​​​​​​        ​​​​​​​        ​​​​​​​e962bbec6f3a4f32854f2897b5a547df.png

今天的内容就到这里啦,初识C语言系列也结束咯,出这个系列是为了让初学者能够快速地上手C语言,对C语言有一个初步的认知,同时我也可以复习之前所学过的内容,巩固基础。后续的文章将针对C语言不同模块的知识进行深入学习,将自己所学都尽量展现出来。因此,我也会努力学习,提高文章的质量,保证严谨性的同时,用通俗易懂的语言让更多的初学uu们学习到知识。

如有错误,还请大佬们及时指出!(salute)

如果这篇文章对你有帮助的话,麻烦您动动小手为我点个赞哦!

我们下期见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

code菜只因

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

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

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

打赏作者

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

抵扣说明:

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

余额充值