一、C语言的基本框架
1.主函数->main函数
2.返回值
3.头文件
头文件里面存放着一些函数的声明,在调用函数的之前,必须先写上函数的声明。也就是说,一定要写头文件才能调用相关的函数。
我们常见的printf()函数的函数声明就在#include <stdio.h>中,所以一般的.c文件头文件都可以看到头文件#include <stdio.h>包含在内。
linux下的头文件都是存放在/usr/include目录。
如何查找一个函数的头文件是哪一个?
例如查找printf()函数在哪一个头文件
- 在终端命令行输入:man 3 printf (不是2就是3)
- 弹出手册关于printf()函数的相关信息,可得知头文件为 #include <stdio.h>
- 按键盘q返回终端
4.命令行传参
程序执行命令:./xxx ->程序的名字
主函数如果是 int main() int main(void)这类等则不会接收任何参数,也就是说,即使命令行传递了参数也不会接收。
可以接受传参的主函数 int main(int argc,char *argv[])
argc:代表一共有多少个参数传递过来的数量 全名(argument count)->参数计数
argv:代表每一个参数分别是什么 全名(argument value)->参数值
argv[0] ->接收的第一个参数 argv[1]->接收的第二个参数
例子代码:
#include <stdio.h>
int main(int argc,char *argv[])
{
printf("argc = %d\n",argc);
printf("argv[0] = %s\n",argv[0]);
printf("argv[1] = %s\n",argv[1]);
return 0;
}
命令行传参有什么作用呢?
对于一些容易改动的值,使用命令行传参可以避免频繁修改代码的工作。
例如我们主函数代码中有printf("%s\n",argv[1]);我们只需要执行程序./xxx 加参数
一个良好的程序应该包含以下几个方面:
- main函数
- 返回值
- 头文件
- 命令行传参
- 注释
- 空格
- 缩进
二、编译
编译时,编译器在检查你的语法是否正确
编译通过:生成一个新的二进制可执行程序,运行该程序即可
编译警告:代码出现不合理性,但也可以编译通过,也会生成一个新的二进制可执行程序
编译出错:语法上有问题,必须解决才能编译通过
(编译出错不可怕,后期的段错误是我头疼的点)
三、数据类型
一共两种数据类型:基本数据类型、非基本数据类型
基本数据类型:在Linux系统下本来就存放的数据类型,我们可以直接使用
在64位系统中:
-
整数类型:
char 字符型
:1个Byte字节 8个bitint 整型
:4个Byte字节 32个bitshort 短整型
:2Byte个字节 16个bitlong 长整型
:8个Byte字节 64个bitlong long
:8Byte个字节 64个bit
-
浮点数类型:
float 单精度浮点型
:4个Byte字节 ->默认保留小数点后6位double 双精度浮点型
:8个Byte字节 ->默认保留小数点后15位long double
:16Byte个字节
在32位系统中:
-
整数类型:
char
:1个Byte字节int
:4个Byte字节short
:2个Byte字节long
:4个Byte字节long long
:8个Byte字节
-
浮点数类型:
float
:4个Byte字节double
:8个Byte字节long double
:12个Byte字节
默认64位系统
printf("%ld\n",sizeof(char)); //1
printf("%ld\n",sizeof(short)); //2
printf("%ld\n",sizeof(int)); //4
printf("%ld\n",sizeof(long)); //8
printf("%ld\n",sizeof(float)); //4
printf("%ld\n",sizeof(double));//8
默认有符号位->有正负 最高位作为符号位
类型前加 unsigned 表示无符号类型 即最高位也作为数据位
非基本数据类型:在Linux系统中是不存在的,我们得自个编写以及声明,才可以使用
数组、指针、结构体、、、
四、如何定义变量、内存空间分配
定义:基本数据类型+变量名
变量名规则:
1.不能以数字开头
2.只能使用数字、字母、下划线组成
3.不能使用系统关键字
int a;这行代码的含义是:
在内存中连续申请4个字节的空间,然后使变量a间接访问这块空间
内存空间分配
在分配空间时,内存地址一定是连续的
申请的空间位置具有随机性
五、变量赋值以及生命周期、作用域
变量赋值
int a = 100;表示100对a进行赋值,即100储存在a所代表的那块空间
生命周期
变量从什么时候开始出现在内存空间到什么时候从内存空间中释放的时间
作用域
作用域:变量能够在程序作用到的地方
根据作用域区分变量分类:局部变量、全局变量
局部变量、全局变量
在函数内部定义的变量就是局部变量 ->只能在函数内部使用,外面不能使用 形参也是局部变量
在函数外部定义的变量就是全局变量 ->整个程序可以使用
局部变量默认都是随机值、全局变量默认都是0
局部变量的生命周期:
局部变量是函数体内申请的,在变量定义时开始申请,该函数结束返回时,局部变量跟着被释放
全局变量的生命周期:
整个程序结束时,全局变量就会被释放