【Amazing! C】变量和常量,字符串和转义字符

目录

一、变量、常量

1.1 变量的命名

1.2 变量的分类

1.3 变量的作用域和生命周期

1.4 常量

1. const修饰的常变量

2. #define定义的标识符常量

3. 枚举常量enum

二、字符串和转义字符

2.1 字符串

2.2 转义字符

一、变量、常量

1.1 变量的命名

只能由字母、数字、下划线组成,不能以数字开头,变量名中区分大小写,变量名不能使用关键字。如:int 2*3//err;int 2a//err; int _2a//ok。

1.2 变量的分类

变量分为局部变量和全局变量,当局部变量和全局变量在一个地方都可以使用时,一定局部优先。

全局变量:在{}外边定义的变量就是全局变量

局部变量:在{}内部定义的变量就是局部变量

1.3 变量的作用域和生命周期

变量的作用域分为全局变量的作用域和局部变量的作用域,全局变量的作用域是整个工程。生命周期是指变量的创建到变量的销毁之间的时间段。因此可以说,作用域是范围,生命周期是时间。

1.4 常量

常量包括字面常量(20.0,3.14,100,‘a’)、const修饰的常变量、#define定义的标识符常量、枚举常量等。

1. const修饰的常变量

#include<stdio.h>
int main()
{
    const int a = 10;
    printf("a = %d\n", a);
    a = 100;
    printf("a = %d\n", a);
    
    return 0;
}

其中,a就是const修饰的常变量,但本质上a还是一个变量,只不过从语法上加了一个限制。此时,上述程序报错,a不能被修改。const放在这里就是告诉程序a具有了常属性,不能再被修改了。

2. #define定义的标识符常量

#include<stdio.h>

#define M 100

int main()
{
    printf("%d\n", M);
    int a = M;
    printf("%d\n", a);
    int arr[M] = { 0 };
    
    return 0
}

3. 枚举常量enum

enum是枚举关键字。

enum Color
{
    RED,    //0
    GREEN,  //1
    BLUE    //2
};

int mian()
{
    enum Color c = RED;
    return 0;
}

二、字符串和转义字符

2.1 字符串

字符串就是由双引号引起来的一串字符,是可以存放在字符数组中的。%s是打印字符串。字符串结束的标志是\0的转义字符,如图所示,对于数字arr1,我们虽然只编写了a b c三个字符,但实际上在字符串末尾隐藏了\0的转义字符,printf()库函数在打印字符串的过程中,遇到\0会自动停止。同样的,在strlen计算字符串长度时,\0是结束标志,不算字符串内容。

#include<stdio.h>
#include<string.h>

int main()
{
    char arr1[] = "abc";            //有\0
    char arr2[] = {'a', 'b', 'c'};  //无\0
    
    printf("%s\n", arr1);           //abc
    printf("%s\n", arr2);           //abcxxxxxx
    
    printf("%d\n", strlen(arr1));   //3
    printf("%d\n", strlen(arr2));   //随机值 
 
    return 0;
}

strlen是一个库函数,求字符串长度,统计的是字符串中\0之前的字符个数。此处可与第一节的笔记sizeof区别记忆,再扩展一下,sizeof可以计算数组内有几个元素。

值得注意的是,strlen返回的类型是size_t

2.2 转义字符

不管有没有意义,在C语言中,会把\字母当成一个转义字符,部分转义字符如下表。

\n换行
\0转义字符
\\表示一个反斜杠,防止被解释为转义序列符
\a警告字符,蜂鸣
\ddd表示1-3个八进制数字
\xdd表示2个十六进制数字
#include<stdio.h>
#include<string.h>

int main()
{
    printf("%d\n", strlen("c:\test\111\test.c"));//13
    printf("%d\n", strlen("c:\test\181\test.c"));//15

    return 0;
}

例如:\130代表八进制130,转化为十进制为88,在ASCII码中对应X;

           \x30转换为十进制为48,代表字符0。

更多转义字符请参考:转义序列 - cppreference.com

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值