标识符
- 只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线;
- C 语言中的标识符区分大小写;
- 自定义的标识符不能与关键字同名;
常量
字符常量
- 字符常量中只能包括一个字符,不是字符串。例如:'A'是正确的,但是用'AB'来表示字符常量就是错误的。
- 字符常量区分大小写。例如:'A'字符和'a'字符是不一样的,这两个字符代表着不同的字符常量
- 表示字符时一定加上单直撇 ' '
实例:使用putchar函数将单个字符常量进行输出
#include <stdio.h>
int main()
{
putchar('H');
putchar('e');
putchar('l');
putchar('l');
putchar('o');
putchar('\n');//反斜杠换行,用单直撇
}
运行结果
字符串常量
“Have a good day!”和“beautiful day”即为字符串常量
C语言中存储字符串常量时,系统会在字符串的末尾自动加一个“\0”作为字符串的结束标志
![](https://i-blog.csdnimg.cn/blog_migrate/d171c76c4f3f395db9126859a41dcdb9.png)
字符常量和字符串常量的区别
定界符不同,字符常量使用单直撇 ' ',字符串常量使用的是双引号 " "
长度不同,字符长度为1,字符串长度要包括系统自动加上的/0,比如"H"长度就是2
符号常量
宏定义 #define
#define
也是
C
语言预处理命令的一种,被称为宏定义指令
。所谓宏定义,就是用一个标识符来表示一个字符
串,如果在后面的代码中出现了该标识符,那么就全部替换成指定的字符串
每行
#define
都由
3
部分组成
![](https://i-blog.csdnimg.cn/blog_migrate/27c4ccafc65422cf58164a137a2bc242.png)
分类:
#define 宏名 宏值
#define MAX 10
#define PI 3.1415926
#define 宏名(参数列表) 宏值
#define S(r) PI*r*r
使用宏定义的优点:
1.
给数值赋予一定含义,增强代码可读性
2.
减少代码编写量
3.
可以
“
一改全改
实例:
- 使用宏定义 PI 来定义 3.1415926,计算圆的面积
#include<stdio.h>
#define PI 3.1415926
int main()
{
float r,area;
printf("请输入圆的半径:");
scanf("%f",&r);
area = PI * r * r;
printf("圆的面积为:%f\n",area);
return 0;
}
- 租船每小时 30 元,押金 100 元。输入租船时间,计算出租船费用。 租船费用=时间*每小时钱数+押金
#include <stdio.h>
#define YAJIN 100
#define PERHOUR 30
int main()
{
int h,m;
printf("请输入租船时间:");
scanf("%d",&h);
m = YAJIN + PERHOUR * h;
printf("租船费用为:%d\n",m);
return 0;
}
- 输入程序,对比以下两个宏定义的不同,思考产生不同结果的原因
#include <stdio.h>
#define FUN1(a,b) a * b
#define FUN2(a,b) (a) * (b)
int main()
{
int a = 2;
int b = 3;
printf("%d\n",FUN1(a+b,b+a));
printf("%d\n",FUN2((a+b),(b+a)));
}
答案:
FUN1
的宏替换会变成:
a+b*b+a 结果为13
FUN2
的宏替换会变成:
(a+b)*(b+a) 结果为25
常变量
变量值不可改变的量,使用
const
修饰
例如:
const int a = 10;//
定义一个常变量
a = 9; //
报错,
a
为
const
修饰不可改变
const
修饰后的变量会变成只读,因此无法再次赋值
宏定义常量是在预处理阶段,使用宏名来代替宏值。而常变量是在程序运行时,程序在内存分配的一个变量, 只不过变量不允许再次赋值
变量
类 型 名 称 | 关 键 字 | 占用内存 |
---|---|---|
有符号基本整型 | [signed] int | 4KB |
无符号基本整型 | unsigned [int] | 4KB |
有符号短整型 | [signed] short [int] | 2KB |
无符号短整型 | unsigned short [int] | 2KB |
有符号长整型 | [signed] long [int] | 4KB |
无符号长整型 | unsigned long [int] | 4KB |
单精度类型 | float | 4KB |
双精度类型 | double | 8KB |
长双精度类型 | long double | 8KB |
AUTO变量
auto关键字就是修饰一个局部变量为自动的,这意味着每次执行到定义该变量 的时候,都会产生一个新的变量,并且对其重新进行初始化。
#include<stdio.h>
void AddOne()
{
auto int iInt=1; /*定义整型变量*/
iInt=iInt+1; /*变量加1*/
printf("%d\n",iInt); /*显示结果*/
}
int main()
{
printf("第一次调用:"); /*显示结果*/
AddOne(); /*调用Show函数*/
printf("第二次调用:"); /*显示结果*/
AddOne(); /*调用Show函数*/
return 0; /*程序结束*/
}
关键字auto是可以省略的,局部变量的存储方式默认是自动的。
static变量
对于局部变量来说,static变量是和auto变量相对而言的。在语句块执行期间,static变量将始终保持语句块上一次执行时的值
#include<stdio.h>
void AddOne()
{
static int iInt=1; /*定义整型变量*/
iInt=iInt+1; /*变量加1*/
printf("%d\n",iInt); /*显示结果*/
}
int main()
{
printf("第一次调用:"); /*显示结果*/
AddOne(); /*调用Show函数*/
printf("第二次调用:"); /*显示结果*/
AddOne(); /*调用Show函数*/
return 0; /*程序结束*/
}
用static关键字
#include <stdio.h>
void AddOne()
{
static int m = 3;
m = m * 3;
printf("%d\n",m);
}
int main()
{
printf("m的平方为:");
AddOne();
printf("m的立方为:");
AddOne();
return 0;
}
混合运算
不同类型之间可以进行混合运算,例如10+'a'-1.5+3.2*6
实例:
将int型变量、char类型变量和float型变量进行相加,将结果存放在double类型的result变量中
#include <stdio.h>
int main()
{
int iInt = 1;
char cChar = 'A'; //ASCII码为65
float fFloat = 2.2f; //定义单精度变量
double result = iInt + cChar +fFloat;
printf("%f\n",result);
printf("%.2f\n",result);
return 0;
}