一、常量
- 常量或常数,表示固定不变的数据,是具体的数据
- 常量是固定值,在程序执行期间不会改变
- 常量可以是任何的基本数据类型,比如整数常量、浮点常量、字符常量,或字符串字面值,也有枚举常量
- 字符常量,如'7','a','A',不能是中文,例如'男',因为一个汉字和全角的符号占两个字节(GBK编码)
- 整型常量,如7,18,-2。
- 浮点型常量,如3.14,-2.3,5.67
- 字符串常量,如"123","男","www.baidu.com","马超","xiaoqiu"
二、变量
- 变量使用前必须先进行声明(或定义),向操作系统申请一块内存空间,用于存放数据
- 变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下划线开头。大写字母和小写字母是不同的,因为 C 是大小写敏感的
- 变量其实只不过是程序可操作的存储区的名称。C 中每个变量都有特定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上
1.变量的基本类型
类型 | 描述 |
---|---|
char | 通常是一个字节(八位), 这是一个整数类型。 |
int | 整型,4 个字节,取值范围 -2147483648 到 2147483647。 |
float | 单精度浮点值。单精度是这样的格式,1位符号,8位指数,23位小数。 |
double | 双精度浮点值。双精度是1位符号,11位指数,52位小数。 |
void | 表示类型的缺失。 |
2.变量的定义以及初始化
int i; // 定义整数型变量,用于存放整数 char c; // 定义字符型变量,用于存放字符 float f; // 定义浮点型变量,用于存放浮点数 double d; // 定义浮点型变量,用于存放浮点数int i=0; // 定义整数型变量并初始化 char c=0; // 定义字符型变量并初始化 double d=0; // 定义浮点型变量并初始化
3.变量的赋值
常量的值赋给变量:
i = 10; // 整数型变量赋值10 c = 'A'; // 字符型变量赋值'A' d = 1500.87; // 浮点型变量赋值1500.87 strcpy(name,"xiaoqiu"); // 对字符串变量赋值"xiaoqiu"
变量的值赋给变量:
int i1=i; // 定义变量i1并把i的值赋给它 char c1=c; // 定义变量c1并把c的值赋给它 double d1=d; // 定义变量money1并把money的值赋给它 char name1[21]; // 定义字符串变量name1 strcpy(name1,name); // 把name的值赋给name1 字符串变量的赋值与其它类型不同,不能用=号,要用strcpy函数
4.字符串变量以及初始化
在C语言中,没有“字符串”这个数据类型,而是用字符数组来存放字符串
char name[21]; // 定义一个可以存放20字符的字符串
温馨小提示:
- 如果要定义一个存放20个英文的字符串,数组的长度应该是20+1,原因就是每个字符串后面都有一个 '\0'
- 中文的汉字和标点符号需要两个字符宽度来存放(GBK编码)
- 例如: name[21]可以存放20个英文字符,或10个中文字符
- 字符串不是C语言的基本数据类型,不能用“=”赋值,不能用“>”和“<”比较大小,不能用“+”拼接,不能用==和!=判断两个字符串是否相同,要用函数
对字符串变量来说,初始化就是把内容清空,本质上也是赋0值
char name[21]; // 定义一个可以存放20字符的字符串 memset(name,0,sizeof(name)); // 清空字符串name中的内容
字符串变量的初始化与其它类型不同,要用memset函数
三、示例
test2.c
#include <stdio.h>
#include <string.h>
int main()
{
int i=0; // 定义整数型变量并初始化
char c=0; // 定义字符型变量并初始化
double d=0; // 定义浮点型变量并初始化
char name[20]; // 定义字符串变量
memset(name,0,sizeof(name)); // 字符串初始化
i=10; // 整数型变量赋值10
c='A'; // 字符型变量赋值'A'
d=3.14; // 浮点型变量赋值3.14
strcpy(name,"xiaoqiu"); // 对字符串变量赋值"xiaoqiu"
printf("i=%d\n",i);
printf("c=%c\n",c);
printf("d=%f\n",d);
printf("name=%s\n",name);
}
运行效果:
四、strcpy 和 memset 介绍
C库函数 - strcpy()
描述
C 库函数 char *strcpy(char *dest, const char *src) 把 src 所指向的字符串复制到 dest,需要注意的是如果目标数组 dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况
声明
下面是 strcpy() 函数的声明。
char *strcpy(char *dest, const char *src)
参数
dest -- 指向用于存储复制内容的目标数组。
src -- 要复制的字符串。
返回值
该函数返回一个指向最终的目标字符串 dest 的指针
举个栗子 test3.c
#include <stdio.h>
#include <string.h>
int main()
{
char src[40];// 定义字符串变量
char dest[100];// 定义字符串变量
memset(dest, '\0', sizeof(dest)); //字符串初始化
strcpy(src, "Be happy every day");//对字符串变量src赋值"Be happy every day"
strcpy(dest, src);//把src所指向的字符串复制到 dest
printf("最终的目标字符串: %s\n", dest);
return(0);
}
运行效果
C库函数 - memset()
描述
C 库函数 void *memset(void *str, int c, size_t n) 复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符
声明
下面是 memset() 函数的声明。
void *memset(void *str, int c, size_t n)
参数
str -- 指向要填充的内存块。
c -- 要被设置的值。该值以 int 形式传递,但是函数在填充内存块时是使用该值的无符号字符形式。
n -- 要被设置为该值的字符数。
返回值
该值返回一个指向存储区 str 的指针
举个栗子 test4.c
#include <stdio.h>
#include <string.h>
int main ()
{
char str[50];
strcpy(str,"Not because of my persistence, but because you deserve it.");
printf("%s\n", str);
memset(str,'^',11);
printf("%s\n", str);
return(0);
}
运行效果
五、关键字
关键字也称为保留字,共32个,这些单词在C语言中有特别的含义,不能把它用于变量或函数的命名
auto:声明自动变量 break:跳出当前循环 case:开关语句分支 char:声明字符型变量或函数返回值类型 const:声明只读变量 continue:结束当前循环,开始下一轮循环 default:开关语句中的“默认”分支 do:循环语句的循环体 double:声明双精度浮点型变量或函数返回值类型 else:条件语句否定分支(与if连用) enum:声明枚举类型 extern:声明变量或函数是在其它文件或本文件的其他位置定义 float:声明浮点型变量或函数返回值类型 for:一种循环语句 goto:无条件跳转语句 if:条件语句 int:声明整型变量或函数 long:声明长整型变量或函数返回值类型 register:声明寄存器变量 return:子程序返回语句(可以带参数,也可不带参数) short:声明短整型变量或函数 signed:声明有符号类型变量或函数 sizeof:计算数据类型或变量长度(即所占字节数) static:声明静态变量 struct:声明结构体类型 switch:用于开关语句 typedef:用以给数据类型取别名 unsigned:声明无符号类型变量或函数 union:声明共用体类型 void:声明函数无返回值或无参数,声明无类型指针 volatile:说明变量在程序执行中可被隐含地改变 while:循环语句的循环条件
关键字无需背诵,用多了就熟悉了,本期就到这里,886!