本博文基于:菜鸟教程和一些网络文章
一、C语言的基础知识:
1.1972年为了移植和开发UNIX操作系统,丹尼斯·里奇在贝尔实验室设计开发了C语言
2.现在C语言的最新标准时C11,之前的是C99。C语言的标准是由ANSI,美国国家标准协会制定的
3.C语言是以B语言为基础的,至于B语言是什么,,,emmm就是一种无类型的语言,现在已经弃置。
二、C语言的环境配置
(从学java遗留下来的毛病,能手打的代码坚决不用IDE)
1.下载和安装gcc(我用的是windows系统,所以装的是MinGW),转完之后将bin目录放入系统环境变量PATH中(和java很像)
2.打开命令管理器,使用gcc -v命令,如果控制台输出一串版本信息就成功了
3.使用gcc [源程序名] -o [目标程序名]来编译文件,生成exe文件,之后就可以在命令管理器中直接输入文件名来执行了
三、第一个C语言程序,当然是hello world,宣告我们来到这个.....等等,我们不是小鸡...
#include
int main()
{
printf("hello, world");
return 0;
}
hello world程序,也是我学习java的第一个程序,补充一下,如果这样写
#include
int main(int argc, char *argv[])
{
printf("可执行程序 %s,参数个数为[%d],运行输出[%s]\n", argv[0], argc, argv[1]);
return 0;
}
如图所示执行得到:
我们可以看到,argc是参数的个数,默认就有一个参数,就是文件名;剩下的参数即第二行中的“参数”二字。
四、C语言程序结构
预处理指令、函数、变量、语句0(或者表达式)、注释
五、C的基本语法
1.C的令牌:C程序由各种令牌组成,令牌可以是关键字、标识符、常量、字符串值或者一个符号
比如:
printf("hello world");
令牌1:printf
令牌2:(
令牌3:"hello world"
令牌4:)
令牌5:;
2.C语言的程序构成方式
(一)C语言程序由函数构成,每个函数可以实现一个或者多个功能
(二)一个正规的程序可以有多个函数,但是main函数只能有一个
(三)函数只有在被调用的时候执行,主函数由系统调用执行
(四)函数的格式必须按照规范书写
(五)C语言程序文件的后缀为.c
六、C语言数据类型
1.C语言数据类型概述:
基本类型:算数类型,包括整数类型和浮点类型
枚举类型:也是算数类型,在程序之中能赋予一定离散整数值的变量
void类型:类型说明符void表明没有可用的值
派生类型:包括指针类型、数组类型、结构类型、共同体类型和函数类型
2.整数类型:
char(1),unsigned char(1),signed char(1)
int(2 or 4),unsigned int(2 or 4)
short(2),unsigned short(2)
long(4),unsigned long(4)
3.浮点类型
float(4)、double(8)、long double(16)
※上述内容中括号内是各种类型占的字节数
4.void有三种情况
返回值为空、函数参数为空和指针指向void
实验:获取float的最大值和最小值
#include
#include
int main()
{
printf("float的最大值是:%f或者%e\n", FLT_MAX);
printf("float的最小值是:%f或者%e", FLT_MIN);
return 0;
}
执行结果:
实验:使用sizeof运算符获取字节大小
#include
#include
int main()
{
printf("char的大小是:\t%d个字节\n", sizeof(char));
printf("unsigned char的大小是:\t%d个字节\n", sizeof(unsigned char));
printf("signed char的大小是:\t%d个字节\n", sizeof(signed char));
printf("int的大小是:\t%d个字节\n", sizeof(int));
printf("unsigned int的大小是:\t%d个字节\n", sizeof(unsigned int));
printf("short的大小是:\t%d个字节\n", sizeof(short));
printf("unsigned short的大小是:\t%d个字节\n", sizeof(unsigned short));
printf("long的大小是:\t%d个字节\n", sizeof(long));
printf("unsigned long的大小是:\t%d个字节\n", sizeof(unsigned long));
return 0;
}
执行结果:
※标准库我还不是非常熟悉,反正每个语言都应该是先学核心,之后是类库,之后是开源框架之类的,之后就是源码了。额,,,粗浅之谈。
七、C语言的变量
1.类型决定了变量存储大小和布局
2.变量定义就太简单了
3.变量声明和变量定义的区别:
变量声明:如同
extern int a;
之类的代码就是声明一个变量,注意:声明之后,还要进行变量的定义方可使用(实际上能使用的都是已经定义之后的变量)
定义变量:使用一般的定义方法,如
int a;
int a1 = 5;
或者
extern int a = 1;
即可(只要是赋值了,就是定义了;使用extern不赋值就是声明)
4.实验,变量的内存分配:
#include
int main()
{
int a;
int b;
printf("a的地址是:%p,b的地址是:%p", &a, &b);
return 0;
}
※其中的%p是占位符,用于显示指针;而&a和&b分别代表a的地址和b的地址
执行结果
可以看出在前面定义的a的地址是0061FF2C,在后面定义的b的地址是0061FF28
C - 8 = 4,可以证明
(一)int类型的变量占内存的4个字节(这是按字节编址吧233)
(二)在前面定义的变量地址比后面定义变量的地址要大(从高地址向低地址分配)
八、C语言的常量
1.常量定义只需要两个关键字:define和const
2.define的使用方法
#include
#define CONSTANT_VALUE 10
int main()
{
printf("常量的值是:%d", CONSTANT_VALUE);
return 0;
}
执行结果当然是将常量的值输出了
3.const的使用方法
#include
int main()
{
const int a = 10;
printf("a = %d", a);
return 0;
}
这个结果当然也是将常量输出了
4.const和define的区别
(一)首先两者处理的时间不同,define是在预处理阶段展开,而const是在编译运行阶段使用
(二)类型和安全检查不同,define没有类型检查,而const在执行类型检查
(三)存储方式不同,define不会分配内存,它定义的值将会在程序中使用一份,拷贝一份;const直接分配一次内存,之后就传指针(emmm这个我用实验没有验证出来)
虽然没有验证出来,这个人还是非常无耻的将这个实验的代码贴出来
#include
#define DEFINE_VALUE1 10
int main()
{
const int CONST_VALUE1 = 10;
int a = CONST_VALUE1;
int b = CONST_VALUE1;
int c = DEFINE_VALUE1;
int d = DEFINE_VALUE1;
printf("CONST_VALUE1的地址是:%p\n", &CONST_VALUE1);
printf("a1的地址是:%p\n", a1);
printf("a2的地址是:%p\n", a2);
printf("a的地址是:%p\n", &a);
printf("b的地址是:%p\n", &b);
printf("c的地址是:%p\n", &c);
printf("d的地址是:%p\n", &d);
return 0;
}
结果:
结果发现人家给的就是渐渐单单的地址,我晕(我从一开始思路就是错的,因为学的东西少嘛~)
这可能就是主存的间接寻址?
学个C语言真有点麻烦,学个儿童版都这么费劲2333
今天连控制语句都没有学到就过分了,很有可能语言基础部分我要过一周.......