C语言基础学习-day1

本博文基于:菜鸟教程和一些网络文章

一、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<stdio.h>
int main()
{
    printf("hello, world");
    return 0;
}

    hello world程序,也是我学习java的第一个程序,补充一下,如果这样写

#include <stdio.h>

int main(int argc, char *argv[]) 
{
	printf("可执行程序 %s,参数个数为[%d],运行输出[%s]\n", argv[0], argc, argv[1]);
	return 0;
}

    如图所示执行得到:

替换文本什么的,是alt吗/xyx

    我们可以看到,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<stdio.h>
#include<float.h>
int main()
{
	printf("float的最大值是:%f或者%e\n", FLT_MAX);
	printf("float的最小值是:%f或者%e", FLT_MIN);
	return 0;
}

    执行结果:

emm

    实验:使用sizeof运算符获取字节大小

#include<stdio.h>
#include<limits.h>
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;
}

    执行结果:

emm

    ※标准库我还不是非常熟悉,反正每个语言都应该是先学核心,之后是类库,之后是开源框架之类的,之后就是源码了。额,,,粗浅之谈。

七、C语言的变量

    1.类型决定了变量存储大小和布局

    2.变量定义就太简单了

    3.变量声明和变量定义的区别:

        变量声明:如同 

extern int a;

        之类的代码就是声明一个变量,注意:声明之后,还要进行变量的定义方可使用(实际上能使用的都是已经定义之后的变量)

        定义变量:使用一般的定义方法,如

int a;
int a1 = 5;

        或者

extern int a = 1;

        即可(只要是赋值了,就是定义了;使用extern不赋值就是声明)

    4.实验,变量的内存分配:

#include<stdio.h>
int main()
{
	int a;
	int b;
	printf("a的地址是:%p,b的地址是:%p", &a, &b);
	return 0;
}

    ※其中的%p是占位符,用于显示指针;而&a和&b分别代表a的地址和b的地址

    执行结果

emm

    可以看出在前面定义的a的地址是0061FF2C,在后面定义的b的地址是0061FF28

    C - 8 = 4,可以证明

        (一)int类型的变量占内存的4个字节(这是按字节编址吧233)

        (二)在前面定义的变量地址比后面定义变量的地址要大(从高地址向低地址分配)

八、C语言的常量

    1.常量定义只需要两个关键字:define和const

    2.define的使用方法

#include<stdio.h>
#define CONSTANT_VALUE 10
int main()
{
	printf("常量的值是:%d", CONSTANT_VALUE);
	return 0;
}

    执行结果当然是将常量的值输出了

    3.const的使用方法

#include<stdio.h>
int main()
{
	const int a = 10;
	printf("a = %d", a);
	return 0;
}

    这个结果当然也是将常量输出了

    4.const和define的区别

        (一)首先两者处理的时间不同,define是在预处理阶段展开,而const是在编译运行阶段使用

        (二)类型和安全检查不同,define没有类型检查,而const在执行类型检查

        (三)存储方式不同,define不会分配内存,它定义的值将会在程序中使用一份,拷贝一份;const直接分配一次内存,之后就传指针(emmm这个我用实验没有验证出来)

        虽然没有验证出来,这个人还是非常无耻的将这个实验的代码贴出来

#include<stdio.h>
#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

今天连控制语句都没有学到就过分了,很有可能语言基础部分我要过一周.......

猜你喜欢

转载自blog.csdn.net/jdie00/article/details/81138404