前言:学了一年的java,突然想去做游戏所以重新开始学习C语言(大哭)
经典第一课:
1.学会使用VS以及C语言main函数规范
#define_CRT_SECURE_NO_WARNINGS 1
//写代码
//1.写出主函数(main函数)
//100-500行代码
//如何执行呢?-c语言是从主函数的第一行开始执行的
//所以C语言代码中有main函数入口
#include<stdio.h>//printf需要引用头文件stdio.h
int main()
{
printf("holle world");
//在中间狂输入代码
return 0;
}
2.再次复习经典的数据类型:
int:整型 举例子:int a=24;
short:短整型 举例子:short dong=30;
char:字符数据类型 举例:char yang=‘a’;
long long :加长版本
float:单精度浮点数 举例子:float c=0.2;
double: 双精度浮点数 举例子:double d=1.2;(相较于单精度,双精度更准确一点)
2.1 如何查看计算类型或者变量所占空间的大小
在c语言中sizeof方法可以用来计算类型和变量所占空间的大小
int main(){
printf("%d\n",sizeof(char));
printf("%d\n",sizeof(int));
printf("%d\n",sizeof(short));
printf("%d\n",sizeof(long));
printf("%d\n",sizeof(long long));
printf("%d\n",sizeof(float));
printf("%d\n",sizeof(double));
return 0;
}
输出结果:char(1)、short(2)、int(4)、long(4)、long long(8)、float(4)、
double(8),运算单位为字节(byte)。{红色为常用类型}
浮点数据是指带有小数的数字。
因为精度不同分为三种:float(32bit )、double(64bit)、long double(64bit)。
一个细节:在c语言标准中sizeof(long)>=sizeof(int),int,short int ,long int是根据编译环境的不同,所取的范围不同。另外c语言int的取值范围在于它占用的字节数,不同的编译器,规定的不一样。1.ANSI标准定义int是占2个字节 2.TC是按照ANSI标准的,它的int是占2个字节的 3.在VS里面,一个int是占4个字节的
C语言是不存在字符串变量,字符串只能存在字符数组中。
计算机的单位(加强复习一下):bit-比特位-一个比特就是存放一个0或者1;
byte-字节-一个字节等于8bit
kb-1024个byte下面是就是熟悉的内存单位了
变量:
变量分为全局变量与局部变量,分辨起来也很简单:{ }在大括号里面定义的变量就是局部变量只能在大括号内使用,而在{ }外面的就是全局变量可以在全局使用。当局部变量与全局变量名字冲突的时候就会采用局部优先的原则。
练习题1
写一段代码求两个数之和(该题目只是为了了解变量以及引出scanf函数,而不是对局部变量和全局变量加以区分的)
int main(){
int a=0;int b=0;
scanf("%d %d",&a,&b);
sum=a+b;
printf("sum=%d\n",sum);
return 0;
}
小细节:在用scanf_s函数只能在VS编译器上使用,而为了在跨平台的时候不会报错最好选择
scanf函数作为输入指令,但是使用的时候需要在代码页第一行加一行代码:
#define_CRT_SECURE_NO_WARNINGS 1
变量的作用域和生命周期:
作用域 :一段代码程序不可能总是有效的/可用的,而限制这个限定这个名字的可用范围就是这个名字的作用域。
全局变量的作用域是整个工程
在跨文件使用变量的时候需要先声明一下:extern 后面加要声明的变量。
比如在一个工程中a源文件定义了一个变量:int a=0(a为全局变量,而且a定义在main函数外面);而在另一个源文件中要去使用这个a变量,但是它识别不到,这时候你就要告诉这个源文件工程中是有这个变量a的:extern int a;
生命周期:
局部变量的生命周期:随着作用范围的加载结束而死亡,如下函数
int main(){
{
//{}可以限制函数的作用范围
int a=10;
printf("%d\n",a);
}
printf("%d\n",a);
return 0;
}
在上述代码中后面的printf语句是不能输出a变量的值,因为a随着上面的}的结束而“死亡”了
全局变量的生命周期:就是程序的生命周期。
常量:字符串常量:3.2 4 a abd
常变量:如果不想让变量被后续操作改变,只需要加一个const把它变成常变量就行。
长变量本质还是一个变量但是增加了不可变属性。
另外还有#define 定义的标识符常量
#difine MAX 10000;
int main(){
int a=MAX;
printf("a=%d\n",a);
return 0;
}
//输出结果是a=10000
此时MAX就是标识符常量,而且MAX不能修改
枚举常量:用性别举例子
关键字enum Sex{ MALE,FEMALE,SECRET }//括号里面的就是Sex对应的变量的未来可能取值
enum Sex{
MALE,//0
FEMALE,//1
SECRET //2
};
int main(){
enmu Sex s =MALE;//在对s赋值的时候只能选择enum里面的值进行赋值。
//如果我们对常量里的值进行输出
printf("%d\n",MALE);
printf("%d\n",FEMALE);
printf("%d\n",SECRET);
}
此刻输出的值依次为:0,1,2;
如果这样定义
enum Sex{
MALE=3,//0
FEMALE,//1
SECRET //2
};
int main(){
enmu Sex s =MALE;//在对s赋值的时候只能选择enum里面的值进行赋值。
//如果我们对常量里的值进行输出
printf("%d\n",MALE);
printf("%d\n",FEMALE);
printf("%d\n",SECRET);
}
则此时输出的值依次为:3,4,5;
字符串、转义字符、注释
字符串:就是一串字符,用双引号括起来的东西(重:字符串的结束标志是\0的转义字符)
证明代码:
int main(){
//字符数组-数组是一数组:一组相同类型的元素
char arr[]="hello wrold"
return 0;
}
在监视页面中,会看到总共的数组理应是有4位,然而实际上是有5位,因为c语言会自动补上一个\0 (\0是字符串的结束标志)在下面的例子中可以理解"\0"这个结束标识。
我们定义两个字符串:char arr1[]="abc"; char arr2[]={"a","b","c"};我们再用VS的监听器去看看char1和char2有多少元素时候会发现,arr1中有四个包括a,b,c以及结束符\0,而arr2中有6个,包括a,b,c,以及三个\0结束符。
补充:在c语言中求字符串的长度是可以用strlen来尝试,但是在使用的时候需要引用头文件
#include<string.h>
#include<string.h>
#include<stdu.h>
int main(){
char arr1[]="abc";
char arr2[]={'a','b','c'};
printf("%d\n",strlen(arr1));
printf("%d\n",strlen(arr2));
}
//输出结果为:3,15(15为随机值)
strlen函数在工作的时候就是在寻找\0然后结束+1的操作得到最后的结果,而在对arr2进行寻找\0的时候strlen不确定\0在哪所以就会打印出一个随机数出来。
重点:\0只作为字符串的结束标志并不会影像字符串长度,不作为字符串内容。