1章(c语言基础知识)
- c语言的使用标准,第一个标准是c89标准
- c语言的有关键字是32个,9种控制语句以及34种运算符
- c程序文件的扩展名:文件名.c
编译器:其实简单的理解就是就计算机只能进行计算较为简单的二进制,但是人的日常生活中是很难理解这些语言的,为此,有人想到了一种方法,就是在计算机与人类的语言(接近)之间搭建桥梁,这样人类就可以使用容易理解的语言去控制计算机的运行。
gcc编译器:==(GNN complier collection )==可以用来编译c语言,c++、java、Ada、object c、Go等语言
gcc 编译的方法
1.gcc [-optiond]
2.g++ [-optiond]
解释:
- 命令、选项和源文件之间使用空格分隔
- 一行命令中可以有零个、一个或多个选项
- 文件名可以包含文件的绝对路径,也可以使用相对路径
- 如果命令中不包含输出可执行文件的文件名,可执行文件的文件名会自动生成一个默认名,Linux平台为a.out,Windows平台为a.exe
gcc、g++编译常用选项说明:
选项 | 含义 |
---|---|
-o file | 指定生成的输出文件名为file |
-E | 只进行预处理 |
-S(大写) | 只进行预处理和编译 |
-c(小写) | 只进行预处理、编译和汇编 |
gcc的安装在晚上的教程就比较多,在这里就不一一介绍了
tips:
1.测试gcc安装:win+r键输入cmd后,在命令上中输入:cmd (进入命令行)
然后输入:
gcc -v//需要空格
2.用gcc编译c方法
在文件目录上方点击cmd进入命令行,然后输入
gcc hello.c#加空格,此时输入文件名.c此时默认生成文件名.exe文件(同一目录下)
数据类型(生活中的数据类型是多种多样的,而程序在编写时是为了模拟显示的生活场景或解决一些实际问题)
#include<>和#include""区别
tips:
- < > 表示系统直接按系统指定的目录检索
- “” 表示系统先在 “” 指定的路径(没写路径代表当前路径)查找头文件,如果找不到,再按系统指定的目录检索
注释:
- //叫行注释,注释的内容编译器是忽略的,注释主要的作用是在代码中加一些说明和解释,这样有利于代码的阅读
- /**/叫块注释
- 块注释是C语言标准的注释方法
- 行注释是从C++语言借鉴过来的
1)预处理:宏定义展开、头文件展开、条件编译等,同时将代码中的注释删除,这里并不会检查语法
2)编译:检查语法,将预处理后文件编译生成汇编文件
3)汇编:将汇编文件生成目标文件(二进制文件)
4)链接:C语言写的程序是需要依赖各种库的,所以编译之后还需要把库链接到最终的可执行程序中去
64位和32位
- 所有的64位CPU兼容32位的指令,32位要兼容16位的指令,所以在64位的CPU上是可以识别32位的指令
- 在64位的CPU构架上运行了64位的软件操作系统,那么这个系统是64位
- 在64位的CPU构架上,运行了32位的软件操作系统,那么这个系统就是32位
- 64位的软件不能运行在32位的CPU之上
CPU计算时,先预先把要用的数据从硬盘读到内存,然后再把即将要用的数据读到寄存器。于是 CPU<—>寄存器<—>内存,这就是它们之间的信息交换
第一个c语言程序:
//demo1第一个文件
#include<stdio.h>//包含一个叫stdio.h的头文件(std—standard i-input o-output)
int main(void)//主函数(返回值为整型),主函数有且仅有一个(void为传入的参数,此时的参数为空(void))
{
printf("hello world\n");//完成的任务是输出hello world(printf是print function的缩写)
return 0;//因为函数结束需要返回值,此时的返回值需要为整型(0也为整型数据)
}
数据类型 | 说明以及字节数 |
---|---|
char | 字符型(1字节) |
short | 短整型(2字节) |
int | 整型(4字节) |
long | 长整型(4字节) |
long long | 更长的整型(8字节) |
float | 浮点型(4字节) |
double | 双精度浮点型(8字节) |
注释:c语言的标准规定是sizeof(long)>=sizeof(int)即(8>4)
计算机中的内存:最小的为比特位是二进制
计算机中的最小的为字节(一个字节是8个比特位)
一个kb是1024个字节
一个mb是1024kb
一个G是1024
一个T是1024G
**变量和常量(**简单的理解就是常量就是不变的值、变量就是变化的值)
变量的定义方法:类型 变量名=赋值
例如:int age =10;
变量分为局部变量和全局变量(两者在命名时是不要相同如果是一致的,此时局部变量优先)
#include<stdio.h>
#include<stdlib.h>
int num1=10;//此时定义的变量是全局变量
int main(void)
{
int num2=20;//此时定义的是局部变量
printf("%d\n",num2);
return 0;
}
#include<stdio.h>
#include<stdlib.h>
int num1=10;//此时定义的变量是全局变量
示例:局部变量和全局变零重名
int main(void)
{
int num1=20;//此时定义的是局部变量
printf("%d\n",num1); //此时输出的是局部变量定义的值20
return 0;
}
变量的生命周期:
1.从{开始到}结束,变量只在这个区域内起作用
2.全局变量的生命周期从头至尾,即整个程序的生命周期中局部变量都起作用
C语言中的常量:
- 字面常量
- const修饰的常变量
- #define第一的标识符常量
- 枚举常量
字面常量
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
10;//字面常量
return 0;
}
const修饰的常变量
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
const int num1=10;
printf("%d\n",num1);
num1=20;//此时提示错误,因为num1为cosnt修饰的常变量,此时该值是不能改变的,但是实质还是一个变量
printf("%d\n",num1);
return 0;
}
标识符常量
#include<stdio.h>
#include<stdlib.h>
#define red 50
#define max 10
int main(void)
{
int arr[max]={
0};//此时max需要时常量,此时不会提示错误
printf("%d\n",red);//输出为50
return 0;
}
枚举常量
#include<stdio.h>
#include<stdlib.h>
enum Color{
//定义枚举常量
yello,
red,
blue
};
int main(void)
{
printf("%d\n",yello);//0
printf("%d\n",red);//1
printf("%d\n",blue);//2
enum Color color=blue;
printf("%d\n",color);
//颜色本身不可变,但是可以将颜色改为另外的两种颜色
color=0;
printf("%d\n",color);
return 0;
}
tips:
1.枚举关键字为enum
2.字符串:双引号括起来的一串字符
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void)
{
char arr1[]={
"abc"};//等价于char arr1[]="abc";
char arr2[]={
'a','b','c'};//如果改为: char arr2[]={'a','b','c','\0'};就是一样的
printf("%d\n",sizeof(arr1));//4
printf("%d\n",sizeof(arr2));//3
printf("%s\n",arr1);//此时实际为'a','b','c','\0'
printf("%s\n",arr2);//此时实际为'a','b','c','\0'
printf("%d\n",strlen(arr1));//strlen是计算字符串的长度
printf("%d\n",strlen(arr2));
//'\0'是字符串结束的标志
return 0;
}
tips:
\0对字符串是十分重要的,(\0是转义字符-就是转变原来的字符的意思)
此时直接放置0也是可以的,只是加上\0加以区分(清晰明了)
例如:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void)
{
printf("abc\n");//\n是转义字符换行
printf("%c\n",'\'a');//此时输出为‘a
printf("c:\test\32\test.c");//此出是\t为水平制表符,此时字符会自动缩颈四个字符,也就是键盘中的tap键的作用
//如果手要输出\t则需要使用\\t->\t
printf("\n");
printf("%d\n",strlen("c:\test\32\test.c"));//此时输出为13,以为此时的\32为8进制数,此时为一个字符
return 0;
}
C语言中如何实现循环
- while语句
- for语句
- do …while语句
数组:相同类型元素的集合
示例:
int arr[10];//定义一个存放十个整型数字的数组
char ch [20];//定义一个存放20个字符的数组
float arr2[5];
//赋值
int arr3[10]={
1,2,3,4,5,6,7,8,9,10};
//可以使用下标进行查找,下标是从0开始的,最大的下标数位为10-1=9
数组变遍历:
函数的分类:
- 自定义函数
- 库函数
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int Add(int x,int y)//自定义的函数Add
{
return (x+y);
}
int main(void)
{
int num1;
int num2;
int ret=0;
scanf("%d%d",&num1,&num2);
ret=Add(num1,num2);
printf("ret=%d\n",ret);
return 0;
}
操作符:
- 算术操作符+ - * \ %(取余)
- 移位操作符:<<(左移)>>(右移)
- 位操作符:二进制位&(按位于)、|(按位或)^(按位异或)
- 赋值操作符: +=、-=、*=、/=、%=、>>=、<<=
操作符:
- 单操作法(1个操作数):如:!逻辑反操作
- 双目操作符(两个操作符)如a+b
- 三目操作符
tips:
c语言中0为假非0为真
sizeof(计算变零或者类型所占内存空间的大小)
使用方法:
int num1=1;
prntf("%d\n,sizeof(num1));//此时求的是变量占内存空间的大小
prntf("%d\n,sizeof num1);//同上,此时括号可省略
prntf("%d\n,sizeof(int));//此时求的是整型数据占内存空间的大小,此时括号不可省略