目录
一、数据类型
首先需要强调的一点是,C语言中并没有字符串类型!
C语言规定的数据类型主要有七类:char(字符型)、short(短整型)、int(整型)、long(长整型)、long long(更长的整型)、float(单精度浮点型)、double(双精度浮点型)
数据类型与我们的生活息息相关,例如我们常说的某个人的体重有50.5kg,这里的50.5就可以用浮点型来表示;一个人的身高有180cm,这里的180就可以用整型来表示……下面我将把部分数据类型放在代码中,通过运行结果更直观的理解。
1.字符类型:
#include<stdio.h>
int main()
{
char ch = 'A';
printf("%c\n",ch);//%c——打印字符格式的数据
return 0;
}
运行结果如下:
2.整型:
#include<stdio.h>
int main()
{
int age = 20;
printf("%d\n",age);//%d——打印整型十进制数据
return 0;
}
运行结果如下:
3.浮点型
#include<stdio.h>
int main()
{
float f = 6.0;
printf("%f\n", f);//打印浮点数字
return 0;
}
运行结果:
#include<stdio.h>
int main()
{
double d = 3.14;
printf("%lf\n", d);//打印double型的用%lf
return 0;
}
运行结果:
通过上面这两个例子就可以发现这些数据类型是向内存申请空间创建变量的。
那么,不同的数据类型可以申请多大的空间呢,这里就通过sizeof()来解决这个困惑。
#include<stdio.h>
int main()
{
printf("%d\n", sizeof(char));
printf("%d\n", sizeof(short));
printf("%d\n", sizeof(int));
printf("%d\n", sizeof(long));
printf("%d\n", sizeof(long long));
printf("%d\n", sizeof(float));
printf("%d\n", sizeof(double));
return 0;
}
运行结果:
这样,每个数据类型申请的内存空间就一目了然了。
注:内存的单位是byte(字节),1byte = 8bit
二、常量与变量
(一)常量
生活中会有许多值不发生变化的量,例如圆周率、性别、身份证号码、血型等等,这一类量我们可以称之为常量。
分类:
- 字面变量
- const修饰的常变量
- #define定义的标识符常量
- 枚举常量
#include<stdio.h>
enum Sex //括号中的MALE,FEMALE,SECRET是枚举常量
{
MALE,
FEMALE,
SECRET
};
int main()
{
//字面常量的演示
3.14;//字面常量
1000;//字面常量
//const修饰的常变量
const float pai = 3.14f; //这里的pai是const修饰的常变量
//pai = 6.25;//是不能直接修改的
//#define的标识符常量演示
#define MAX 100
printf("max = %d\n", MAX);
//枚举常量演示
printf("%d\n", MALE);
printf("%d\n", FEMALE);
printf("%d\n", SECRET);
};
上述中的pai虽然被const修饰后在语法层面限制了不能被直接修改,但是它本质上依然是一个变量,故将其命名为常变量。
运行结果:
(二)变量
上面提到值不发生变化的量称为常量,那么与之相对应的,发生变化的量我们也可以称之为变量。
(1)变量的定义
首先我们要给变量进行定义,不被定义的变量在运行的过程中是会报错的。
int age = 18;
float weight = 51.2f;
char ch = 'v';
(2)变量的分类
- 局部变量
- 全局变量
#include<stdio.h>
int global = 2019;//全局变量
int main()
{
int local = 2018;//局部变量
int global = 2010;//局部变量
printf("%d\n", global);
return 0;
}
在上述代码中,我们可以看到我定义了两个变量global,那么会不会产生错误呢?现在让运行结果来告诉我们答案:
通过这一个例子可以看出局部变量与全局变量命名相同时,不会产生错误,但是一般情况下还是不建议采用相同的命名。
对于局部变量与全局变量我们可以引出两个新的概念——变量的作用域与生命周期。
作用域是程序设计概念,主要是限定一段程序中所用到的名字可行性的代码范围。
1.局部变量的作用域是变量所在的局部范围。
2.全局变量的作用域是整个工程。
生命周期是指变量的创建到销毁的一个时间段。
1.局部变量的生命周期:进入作用域生命周期开始,出作用域生命周期结束。
2.全局变量的生命周期:整个程序的生命周期。
(3)变量的使用
#include<stdio.h>
int main()
{
int num1 = 0;
int num2 = 0;
int sum = 0;
printf("输入两个操作数:>");
scanf("%d %d",&num1,&num2);//变量的输入
sum = num1 + num2;
printf("sum = %d\n",sum);
return 0;
}
三、字符串、转义字符与注释
(一)字符串
"hello CSDN."
这种由双引号引起来的一串字符称为字符串字面值,简称字符串。
值得注意的是,字符串的结束标志是\0,在计算字符串长度的时候\0不算作字符串的内容。
接下来通过一串代码更加直观地明确\0的重要性:
#include<stdio.h>
int main()
{
char arr1[] = "hello";
char arr2[] = { 'h','e','l','l','o'};
char arr3[] = { 'h','e','l','l','o','\0' };
printf("%s\n", arr1);
printf("%s\n", arr2);
printf("%s\n", arr3);
return 0;
}
(二)转义字符
首先我们先在屏幕上打印一个目录:c:\code\test.c
#include<stdio.h>
int main()
{
printf("c:\code\test.c\n");
return 0;
}
在这里我们就不得不提到转义字符了。
接着再来运行一个程序,加深对转义字符的印象。
#include<stdio.h>
int main()
{
printf("%d\n", strlen("abcdef"));
printf("%d\n", strlen("c:\test\628\test.c"));//\86被解析成一个转义字符
return 0;
}
(三)注释
1.用途:
- 代码中有不需要的代码可以直接删除,也可以注释掉;
- 代码中有一些代码比较难懂,可以加一下注释文字。
2.风格:
- C语言风格的注释/* */
不能嵌套注释
- C++语言风格的注释//
可以注释一行,也可以注释多行