【c语言系列】字符串+转义字符+注释+常见关键字

目录

前言

1.字符串

2.转义字符

2.1 常见的转义字符

2.2  一道简单的选择题

2.3 一道笔试题:

3.注释

3.1 注释的风格 

4.常见关键字 

4.1 关键字 typedef

4.2 关键字static

4.2.1 修饰局部变量

4.2.1.1  结论

4.2.1.2  补充

4.2.2  修饰全局变量 

4.2.3  修饰函数

5.  附加

5.1 #define 定义常量和宏


前言

这里将为大家介绍一些c语言的一些必备知识,掌握好这些别人所不知道的小知识,能让你对c语言的把控更为牢靠,更容易理解和运用c语言的知识。

1.字符串

c语言中有字符类型,但是有字符串类型吗?

答案肯定是没有的。

"haha\n"

 这种由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符串。

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

#include <stdio.h>
#include <string.h>
//下面代码,打印结果是什么?为什么?(突出'\0'的重要性)
int main()
{
    char arr1[] = "bit";//有"\0"
    char arr2[] = {'b', 'i', 't'};//无"\0"
    char arr3[] = {'b', 'i', 't', '\0'};
    printf("%s\n", arr1);
    printf("%s\n", arr2);
    printf("%s\n", arr3);
    printf("%d\n",strlen(arr1));
    printf("%d\n",strlen(arr2));//strlen是求字符串长度的一个库函数,统计的是\0之前的字符个数
    printf("%d\n",strlen(arr3));//arr1和arr3都有固定值,而arr2是随机值
    return 0;
}

2.转义字符

假如我们要在屏幕上打印一个目录: c:\code\test.c

我们该如何写代码?

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

但是实际上程序运行结果是这样的:

 这里就不得不提一下转义字符了。转义字符顾名思义就是转变意思。 下面我们看一些转义字符

2.1 常见的转义字符

    转义字符                                                                    释义

         \?                                   在书写连续多个问号时使用,防止他们被解析成三字母词

         \'                                    用于表示字符常量'

         \“                                    用于表示一个字符串内部的双引号

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

        \a                                    警告字符,蜂鸣

        \b                                    退格符

        \f                                     进纸符

        \n                                    换行

        \r                                     回车

        \t                                     水平制表符

        \v                                    垂直制表符

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

        \xdd                                dd表示2个十六进制数字。 如: \x30 0

#include <stdio.h>
int main()
{
    //问题1:在屏幕上打印一个单引号',怎么做?
    //问题2:在屏幕上打印一个字符串,字符串的内容是一个双引号“,怎么做?
    printf("%c\n", '\'');
    printf("%s\n", "\"");
    return 0;
}
2.2  一道简单的选择题

这里有一道题供大家做一做:

下面那个不是转义字符?

A.'\n'               B.'\060'                C.'\q'                D.'\b'

解析: 

A:'\n' 转义字符,代表换行

B:'\060' 转义字符,060八进制数据,十进制为48,表示ASCII码为48的'0'

C:'\q' 什么都不是

D:'\b' 转义字符,表示退格

故答案选C。

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

  怎么样,你做对了吗?代码运行图如下。

3.注释

1. 代码中有不需要的代码可以直接删除,也可以注释掉

2. 代码中有些代码比较难懂,可以加一下注释文字,方便代码的可读性。

#include <stdio.h>
int Add(int x, int y)
{
    return x+y;
}
/*C语言风格注释
int Sub(int x, int y)
{
    return x-y;
}
*/
int main()
{
    //C++注释风格
    //int a = 10;
    //调用Add函数,完成加法
    printf("%d\n", Add(1, 2));
    return 0;
}
3.1 注释的风格 

注释有两种风格:

  •         C语言风格的注释      /*xxxxxx*/

                      缺陷:不能嵌套注释

  •         C++风格的注释      //xxxxxxxx

                      可以注释一行也可以注释多行

4.常见关键字 

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

C语言提供了丰富的关键字,这些关键字都是语言本身预先设定好的,用户自己是不能创造关键字的。这里先讲解几个常用的关键字,其它的关键字会在后续博文中体现出来。

4.1 关键字 typedef

typedef 顾名思义是类型定义,这里应该理解为类型重命名。

//将unsigned int 重命名为uint_32, 所以uint_32也是一个类型名
typedef unsigned int uint_32;
int main()
{
    //观察num1和num2,这两个变量的类型是一样的
    unsigned int num1 = 0;
    uint_32 num2 = 0;
    return 0;
}
4.2 关键字static

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

1. 修饰局部变量-称为静态局部变量

2. 修饰全局变量-称为静态全局变量

3. 修饰函数-称为静态函数

下面将围绕这3种用法展开讨论:

4.2.1 修饰局部变量
//代码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;
}
//代码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;
}

对比代码1和代码2的效果理解static修饰局部变量的意义。

4.2.1.1  结论
  1.   static修饰局部变量改变了变量的生命周期
  2.   让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。 
4.2.1.2  补充

       

 

4.2.2  修饰全局变量 
//代码1
//add.c
int g_val = 2018;
//test.c
int main()
{
    printf("%d\n", g_val);
    return 0;
}
//代码2
//add.c
static int g_val = 2018;
//test.c
int main()
{
    printf("%d\n", g_val);
    return 0;
}

代码1正常,代码2在编译的时候会出现连接性错误。

结论: 一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件内使用。而在两个.c文件中可用全局变量(具有外部链接属性)如:int  g_val = 2023;以及extern int g_val的外部文件的符号声明。

使用static修饰全局变量时,将其外部链接属性变成了内部链接属性,即使用的static修饰全局变量只能在当前.c文件中内部使用,不能在其它的.c文件中使用。改变了作用域!

4.2.3  修饰函数
//代码1
//add.c
int Add(int x, int y)
{
    return c+y;
}
//test.c
int main()
{
    printf("%d\n", Add(2, 3));
    return 0;
}
//代码2
//add.c
static int Add(int x, int y)
{
    return c+y;
}
//test.c
int main()
{
    printf("%d\n", Add(2, 3));
    return 0;
}

代码1正常,代码2在编译的时候会出现连接性错误.

结论: 一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。

5.  附加

5.1 #define 定义常量和宏
//define定义标识符常量
#define MAX 1000
//define定义宏
#define ADD(x, y) ((x)+(y))
#include <stdio.h>
int main()
{
    int sum = ADD(2, 3);
    printf("sum = %d\n", sum);
    
    sum = 10*ADD(2, 3);
    printf("sum = %d\n", sum);
    
    return 0;
}

今天的分享到这里就结束了,喜欢的友友们可以点赞,关注加收藏哦!

希望分享的东西是您所需要的东西......

评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱编程的Tom

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

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

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

打赏作者

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

抵扣说明:

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

余额充值