一、变量的定义
1. 变量的概念
在程序运行的过程中,可以改变值的变量称为变量。
2. 变量的定义格式
<存储类型> <数据类型> 变量名 = 初始值;
1. 存储类型(可以省略不写):6种
auto volatile register static extern const
2. 数据类型
基本类型(整形,字符,实型,枚举)
构造类型(数组,结构体,共用体/联合体)
指针类型
例如:
short / int / long / long long / char / float / double
如果是无符号时,前边加unsigned
3. 变量名 命名的规则
1> 可以由字母,数字,下滑线组成
2> 不可以是数字开头
3> 在C语言中,变量名严格区分大小写, 比如:Max 和 max 是两个不同的变量
4> 不可以是C语言中的关键字
5> 定义的变量名要做到“见名知意”
举例:
maxValue ---> OK
max_value ---> OK
_max_value ---> OK
3_max ---> ERROR
int ---> ERROR ,C语言的关键字
Int ---> OK, 但是不建议使用
zdz ---> OK, 变量名的含义不明确
zxz ---> OK,变量名的含义不明确
retVal ---> OK, 返回值变量名
变量名命名法:
驼峰命名法:
大驼峰命名法:每个单词的首字母大写
MaxValue MinValue GetValue SetValue
小驼峰命名法:首个单词的字母小写,后边每个单词字母大写
maxValue minValue getValue setValue
波谷命名法:多个单词之间使用"_"隔开
max_value min_value get_value set_value
_max_value _min_value _get_value _set_value
4. C语言的关键字,共计有32个
数据类型相关的关键字12个:
char short int long float double enum struct union unsigned signed void
存储类型相关的关键字6个:
auto volatile register static extern const
类型重定义的关键字1个:
typedef
计算数据类型大小1个:
sizeof
控制语句相关的关键字12个:
if else switch case default for while do break continue return goto
3. 定义变量
#include <stdio.h>
int main(int argc, const char *argv[])
{
// 1. 先定义变量,后对变了进行初始化
// 定义变量, 给变量在内存中分配空间,分配空间的大小跟变量的类型有关,可以使用变量名访问对应的变量空间内存中的值。
int a;
// 将100值写到变量a对应的内存空间中
a = 100;
// 读取变量a对应的内存空间的值
printf("a = %d\n", a);
// 2. 定义变量的同时进行初始化,给变量分配空间的同时,进行赋值操作
float pi = 3.1415;
// %f : 默认保留小数点的后6位
printf("pi = %f\n", pi);
// 3. 定义字符类型的变量,可以使用字符的ascii码值进行赋值,也可以使用字符进行赋值,字符需要使用单引号括起来
char c1 = 97;
printf("c1 = %c\n", c1); // 打印ascii码值对应的字符
printf("c1 = %d\n", c1); // 打印字符的ascii码值
char c2 = 'A';
printf("c2 = %c\n", c2); // 打印字符
printf("c2 = %d\n", c2); // 打印字符的ASCII码值
// 4. 相同数据类型的变量可以直接赋值
int b = a; // 使用int类型的a变量,对b变量进行赋值
printf("b = %d\n", b);//打印b的值
return 0;
}
二、常量的定义
1. 整型常量
常量:程序运行过程中,不可以发生改变的量
例如:
整形常量可以使用二进制,八进制,十进制,十六进制表示。
比如:0b11111111 01234 10086 0xFFFF
对于整形常量一般使用整形的变量存储对应的值。
具体使用short类型,int类型,long类型,long long类型,
以及有符号类型还是无符号类型,需要根据自己数据的大小最终来确定。
例如:
#include <stdio.h>
int main(int argc, const char *argv[])
{
printf("%d\n", 10086);
printf("%u\n", 10086);
printf("%#x\n", 0x10086);
printf("%#o\n", 010010);
// 定义变量存储身高
short height = 183;
printf("身高 = %dcm\n", height);
int a = 0b11111111;
printf("a = %d\n", a);
printf("a = %#o\n", a);
printf("a = %#x\n", a);
int b = 0123;
printf("b 的十进制值 :%d\n", b);
printf("b 的八进制值 :%#o\n",b);
printf("b 的十六进制值 :%#x\n", b);
unsigned long x = 0xFFFFFFFFFFFF;
printf("x = %lu\n", x); // %lu : 无符号长整形
printf("x = %#lo\n", x); // %lo:无符号8进制长整形
printf("x = %#lx\n", x); // %lx : 无符号16禁止长整形
return 0;
}
2. 实型常量(浮点型常量)
对于浮点型的变量,可以使用实型常量进行赋值。
及浮点型的常量需要使用浮点型的变量进行存储。
方式1:小数形式表示
比如:3.14 1.83
方式2:科学计数法
比如:
3.14e2 ---> 3.14 * 10^2 ---> 314.0
3.14e-2 ---> 3.14 * 10^-2 ---> 0.0314
-3.14e2 ---> -3.14 * 10^2 ---> -314.0
-3.14e-2 ---> -3.14 * 10^-2 ---> -0.0314
例如:
#include <stdio.h>
int main(int argc, const char *argv[])
{
printf("%d\n", 10086);
printf("%f\n", 3.14);
printf("%le\n",3.1415);
float pi = 3.14;
printf("pi = %f\n", pi); // 默认保留小数点后6位
printf("pi = %e\n", pi); // %e : 以科学计数法格式输出
double height = 18.0345;
printf("height = %lf\n", height); // double类型使用的格式化字符为%lf
printf("height = %le\n", height); // %le : 科学计数法输出
double wight = -198.1234;
printf("wight = %lf\n", wight);
printf("wight = %le\n", wight);
// 使用科学计数法对浮点型变量赋值
double length = 10e-2;
printf("length = %lf\n", length);
printf("length = %le\n", length);
return 0;
}
3. 字符型常量
对于字符类型的常量需要使用单引号括起来。
字符常量可以使用字符类型的变量存储。
字符常量举例: 'A' '\n' '\101' 'a'
"A" ---> 字符串,字符串的长度为1
对于字符常量在内存中存储时,存储的时字符的ASCII码值。
例如:
#include <stdio.h>
int main(int argc, const char *argv[])
{
// 字符常量
printf("A = %c\n", 'A'); // 打印A字符
printf("A char ASCII value = %d\n", 'A'); // 打印字符A的ASCII码值
// 可以使用字符类型的变量存储一个字符
char c1 = 'a'; // 使用字符复制
char c2 = 97; // 使用字符的ASCII码值复制
// %c : 输出打印的就是字符 %d:输出打印的是字符的ASCII码值
printf("c1 = %c, c1 ascii = %d\n", c1, c1);
printf("c2 = %c, c2 ascii = %d\n", c2, c2);
// 将字符变量c中存储的小写字符a,转换为大写字符A
char c = 'z'; // char c = 122;
printf("小写字符转换为大写字符 :%c\n", c - 32);
printf("小写字符转换为大写字符 :%c\n", c - ('a' - 'A'));
return 0;
}
4. 字符串常量
字符串常量需要使用双引号括起来,字符串的结尾有一个尾'\0'字符,
'\0'字符的ascii码值为0.
对于字符串可以使用字符数组进行存储,或者使用字符指针指向字符串常量。
字符串的举例:
"A" "hello" "world" "www.baidu.com" "zhangsan"
对于字符串分配内存空间的大小为"字符串长度+1".
字符串本身也是又一个一个字符构成,因此在内存中存储的是每个字符的ASCII码值。
例如:
#include <stdio.h>
int main(int argc, const char *argv[])
{
// 1. 直接使用printf打印字符串
printf("%s\n", "hello world"); // %s :字符串的格式化字符
// printf函数遇到'\0'字符之后,字符串打印结束
printf("%s\n", "hello\0world"); // 打印hello之后就结束,有一个'\0'
// 2. 可以使用字符数字存储字符串
char c_arr[6] = "hello";
printf("c_arr = %s\n", c_arr);
// 3. 使用字符指针指向字符串
char *c_p = "world";
printf("c_p = %s\n", c_p);
return 0;
}
字符常量/字符串常量总结
1> 字符常量的书写方式,使用单引号
2> 字符串常量的书写方式,使用双引号,字符串结尾有'\0'字符
3> 字符常量和字符串常量在内存中存储的都是字符的ASCII码值
4> 使用字符类型的变量存储字符,使用字符数组存储字符串和字符指针指向字符串。
5. 标识常量(宏定义)
格式:
#define 宏定义名 宏定义值
注
1> 宏定义名字一般大写
2> 宏定义在预处理阶段展开,傻瓜式替换
3> 宏定义的结尾不可以有分号
4> 宏定义一般只写一行,如果写多行需要使用续行符 "\"
#include <stdio.h>
// 宏定义在main函数的上边定义
#define NUMBER 100
#define CH 'A'
#define STR "hello world"
#define PI 3.1415
int main(int argc, const char *argv[])
{
// NUMBER宏定义在预处理阶段被替换为10
printf("NUMBER = %d\n", NUMBER);
printf("CH = %c\n", CH);
printf("STR = %s\n", STR);
printf("PI = %lf\n", PI);
return 0;
}
预处理阶段替换之后的结果:
729 int main(int argc, const char *argv[])
730 {
731
732 printf("NUMBER = %d\n", 100);
733 printf("CH = %c\n", 'A');
734 printf("STR = %s\n", "hello world");
735 printf("PI = %lf\n", 3.1415);
736 return 0;
737 }
#include <stdio.h>
// 宏定义的结尾不可以有分号,错误的,分号也会当初宏定义的值进行替换
// #define MAX_VALUE 100;
// 宏定义的值分多行书写时,需要使用续行符 “\”
#define PRINT printf("hello "); \
printf("world\n")
// 宏定义中也可以写一个算数表达式,优先进行算数运行时,最好使用()提升运算的优先级
#define SUM 100 + 200
#define SUM1 (100 + 200)
int main(int argc, const char *argv[])
{
// printf("%d\n", MAX_VALUE);
PRINT;
printf("%d\n", SUM); // 300
// 预处理展开结果:printf("%d\n", 2 * 100 + 200)
printf("%d\n", 2 * SUM); // 400
// 预处理展开结果 : printf("%d\n", 2 * (100 + 200));
printf("%d\n", 2 * SUM1); // 600
return 0;
}
宏定义替换之后的结果:
# 13 "07define.c"
int main(int argc, const char *argv[])
{
printf("hello "); printf("world\n");
printf("%d\n", 100 + 200);
printf("%d\n", 2 * 100 + 200);
printf("%d\n", 2 * (100 + 200));
return 0;
}