C语言学习笔记(2)

4.标识符、变量、常量

在C语言中,为变量、函数和结构体等起的名称为标识符。

C语言中标识符命名规则:

1.由下划线“_”、英文字母和数字构成,标识符的首字符必须是英文字母或下划线,首字符不能是数字。
2.标识符命名应尽可能做到“见名知意”
3.不能把C语言的关键字作为用户标识符
4.标识符长度是由编译系统决定的,一般的限制为8字符(8字符长度限制是C89标准,C99标准容许任意长度)
5.标识符严格区分大小写

变量是以标识符为名字,其数值可以改变(可读可写(可读:可获取、可取值;可写:可赋值))。
常量其值不可改变(可读,不可写)。
定义变量的格式:数据类型 变量名;
注:变量的定义是一条语句,以分号结尾。

定义:所谓定义就是为这个变量分配一块内存并给它取一个名字,这个名字就是我们经常所说的常量名。但注意,这个名字一旦和这个内存匹配起来,它们就同生共死,并且这块内存的位置也不能被改变。一个变量在一定的区域内(比如函数内、全局等)只能被定义一次,如果定义多次,编译器会提示你重复定义同一个变量或对象。

声明:有两重含义:(1)告诉编译器,这个名字已经匹配到一块内存了;(2)告诉编译器,这个名字我先预定了,别的地方再也不能用它来作为变量名。

声明和定义最重要的区别:定义创建了对象并为这个对象分配一块内存,而声明的时候是没有分配内存空间的。

4.1 变量的作用域(可见性):

每个变量名都有一个作用域,即变量名在什么范围内有效

1.全局变量:在函数外定义的变量
2.局部变量:在函数内定义的变量
3.程序块中的变量:在函数内部、在复合语句中定义的变量

输入输出函数的使用
printf 函数

printf函数称为格式输出函数,其关键字最末一个字母 f 即为“格式(format)”。其功能是按用户指定的格式,把指定的数据显示到显示器屏幕上。

printf函数调用的一般格式为:printf("格式控制字符串", 输出表列);

其中格式控制字符串用于指定输出格式。格式控制字符串可由格式字符串和非格式字符串两种组成。

格式字符串是以%开头的字符串,在%后面跟有各种格式字符串,以说明输出数据的类型、形式、长度、小数位等。如:
%d 十进制整型输出
%o 八进制整型输出
%x 十六进制整型输出
%ld 十进制长整型输出
%c 字符型输出
%f 浮点型输出

非格式字符串在输出时原样输出,在显示中起到提示作用。

输出表列中给出了各个输出项,要求格式字符串和各输出项在数量和类型上应该一一对应。

scanf函数

scanf函数称为格式输入函数,即按照用户指定的格式从键盘上把数据输入到指定的变量中。

scanf函数调用的一般格式:scanf("格式控制字符串", 地址列表);

其中,格式控制字符串的作用和printf函数相同,但不能显示非格式字符串,即不能显示提示字符串。地址列表中给出各变量的地址。地址是由地址运算符“&”后跟变量名组成的。

4.2 常量
1.字面常量
2.用#define定义的宏常量

可以用#define定义一个标识符来表示一个常量。其特点是:定义的标识符不占内存,只是一个临时的符号,预编译后这个符号就不存在了

(#define—宏替换,#include—包含)

#define只有一个作用,就是替换,在预编译替换

注:不要在宏常量后面加分号,不然会将分号替换进去

3.用const关键字修饰的变量,称为常变量

const加在数据类型之前,则变量不可变,即常变量。例:const int g_max = 10;

const加在数据类型和变量名之间,也是不可变的常变量。例:int const x = 0;

(注:全局变量未初始化时默认为0,局部变量未初始化时默认为随机值)

在C中,不论全局变量还是局部变量,在定义const时都要有初始化。

在C中,会将常变量视为变量。const int len = 10; int ar[len]; 数组大小必须在编译时确定好,但是 C 在编译时,认为 len 是一个变量,故编译不允许通过。

在C++中,不允许定义未初始化的常变量,不论全局还是局部。

在C++中,会将常变量视为常量。const int len = 10; int ar[len]; 数组大小必须在编译时确定好,但是在编译时,len视为常量(类似于宏但不是宏,宏在预编译时就替换了,且宏不开空间,而C++中的 const 常变量在编译时替换,要开空间),故编译允许通过。

4.枚举常量
enum week{ mon = 1, tue = 2, wed = 3, thu = 4, fri = 5, sat = 6, sun = 7 }; // 这些叫做枚举常量

int main()
{
    //int wx; // 1 2 3 4 5 6 7
    enum week wx; // 定义枚举变量,枚举变量取得值必须是枚举元素给出来的值
    wx = sun;
    printf("wx = %d", wx);
    return 0;
} 

枚举常量只能赋给整型值,不能赋给其他数据类型。

若不给出枚举值,则会按照 “上一个枚举值 + 1” 的算法来进行。

定义枚举变量,枚举变量取得值必须是枚举元素给出来的值。

枚举变量只能赋予标识符(但是C似乎没有严格要求这个,但是C++有这个要求)。

5.字符常量和字符串常量(重点)

ASCII码是由 8 位二进制数的组合来表示 128 个字符,分为非打印控制字符和打印控制字符。

ASCII码产生原因:在计算机中,任何数据都以二进制的形式存储。但我们没办法用二进制去真正意义上存储字母"a"进去,因为二进制数最终只能落实成数而不是文本,类似于用电报表示文本就只能对每一个文本进行编码,于是对 128 中文本编码成各个数字。

几个需要记住的码值:
换行—10 回车—13 空格—32 0—48 A—65 a—97

单引号是字符的定界符,双引号是字符串的定界符。

int main()
{
	char cha = 'a'; // 编译器中单引号'和双引号"不看做字符,而是定界符
	char chb = 97;
	printf("cha = %c, chb = %c\n", cha, chb); // 两个都输出a
	printf("cha = %d, chb = %d\n", cha, chb); // 两个都输出97
}
转义字符含义ASCII码值(十进制)
\a响铃符(BEL)7
\b退格符(BS),将当前位置移到前一列8
\f换页符(FF),将当前位置移到下一页开头12
\n换行符(LF),将当前位置移到下一行开头10
\r回车符(CR),将当前位置移到本行开头13
\t水平制表符(HT),跳到下一个Tab位置9
\v垂直制表符(VT)11
\\代表一个反斜线字符92
\`代表一个单引号39
\"代表一个双引号34
\?代表一个问号63
\0空字符0
\0001到3位八进制数所代表的任意字符三位八进制数
\xhh1到2位十六进制数所代表的任意字符二位十六进制数

注:并不是 \ 后面随便跟个字母就有意义。

转义字符:
1.注意是反斜杠“\”
2.\xhh 十六进制转义不限制字符个数,如:‘\x0000000000000000000F’ -> ‘\xf’
3.八进制形式的转义字符后面最多跟3个数字,即\ddd,最大值取\177
4.十六进制形式的转义字符后面多跟2个数字,即\xdd,最大值取\x7f

#include<stdio.h>

int main()
{
   char cha = 0; // 空字符的ASCII码值为0
   char chb = '0';
   char chc = '\0';
   char chb = ' '; // 空格
   
   printf("cha = %c\n", cha); // 空
   printf("chb = %c\n", chb); // 0
   printf("chc = %c\n", chc); // 空
   printf("chd = %c\n", chd); // 空
   
   printf("ASCII码值:\n");
   
   printf("cha = %d\n", cha); // 0
   printf("chb = %d\n", chb); // 48
   printf("chc = %d\n", chc); // 0
   printf("chd = %d\n", chd); // 32
   
   return 0;
}

C语言中,凡是以双引号引起来的字符串,均以 \0 结尾标记,碰见即结尾,不论是系统自己加的还是手动敲的。计算字符串长度时,并不计算进去。使用 strlen 函数(要带<string.h>头文件)可以计算字符串长度,计算结果不包含 \0 空字符,但实际上\0会占一个字节的空间。

#include<string.h>

int main()
{
    char stra[] = { "tulun" };
    int len = strlen(stra);
    printf("%d\n", len);
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值