C语言学习笔记
第一章 初识C语言
第二章 C语言概述
2.1 简单的C语言实例
在Linux系统下可以使用两种种方法来编写C语言代码
touch file_name.c
vi file_name.c
nano file_name.c
编译c文件,可以用Linux系统下自带的编译器工具gcc
gcc -b
# 可以用来查看当前gcc编译工具的版本
gcc file_name.c
# 用编译器工具gcc来编译编写好的c文件,编译后生成一个可执行文件a.out
gcc file_name.c -o exe_name
# 用编译器工具gcc来编译编写好的c文件,编译后生成一个可执行文件exe_name
这是一个简单的C程序。一个程序可以有多个函数。
#include <stdio.h>
int main(void)
{
int num;
num = 1;
printf("I am a simple computer\n");
printf("my favorite number id %d\n", num);
return 0;
}
// 单行注释
/*
多行注释
*/
第一行:
#和include后面加上要包含的头文件。那头文件里面声明过的函数,我们都可以在本文件当中直接使用。
第二行:
在只考虑上位机和PC机而不考虑底层的情况下,任何一个C语言有且只有一个main函数,并且所有程序都从main函数开始执行。(操作系统调用main函数)
main函数前面的数据类型代表的是我们main函数返回一个什么样数据类型的值。
main函数后面的圆括号表示main是一个函数。括号里面的内容是调用函数传入的参数,void表示没有参数传入。
第三行:
我们函数主要实现的内容放在花括号中,被称为函数体。
第四行:
声明了一个int类型的变量。当声明一个变量后程序会在我们的内存空间中开辟一片空间用来存放这个变量。
第五行:
变量的赋值操作。将一个值放入到这个变量开辟的内存空间中。
第六行:
printf是一个标准输出的函数,将括号中的内容格式化(f)输出到我们的便准输出(屏幕上)。
\n是一个换行操作。是一个转义字符。转义字符就是可以转换字符意思的字符。不会显性地显示在屏幕上。
第七行:
%d代表的含义要进行替换操作,用number把%d给替换。d代表一个十进制的一个整形数。
第八行:
将main函数提供一个执行结果。
第九行:
右花括号表示函数内容的结束。
第十行:
C语言可以用两个斜杠来对代码进行注释
第十一行:
C语言也可以用/*和*/来进行多行和单行注释。
注意:
任何C语言的语句都要以分号结尾。
2.2 进一步使用C语言
/*
fathoms convert to feet
将2英寻转化为英尺
*/
#include <stdio.h>
int main(void)
{
int feet, fathoms; // int feet; int fathoms;
fathoms = 2;
feet = 6*fathoms;
printf("There is %d feet in %d fathoms.\n", feet, fathoms);
printf("Yes, I said %d feet!\n", 6*fathoms);
return 0;
}
第十行:
可以一次声明多个相同类型的变量,并用逗号隔开。
第十四行:
printf是一个函数可以带多个参数。
第十五行:
printf也可以进行表达式的替换。
注意:
函数所代表的功能啊。以及变量所代表的功能,最好在程序的相关的位置做一些注释说明。
选择函数和变量的名称的时候要尽量用一些函数和变量所要实现的意义相近的这个英文单词。
在程序当中要尽量把不同的功能模块要用空格的方式来分开。
程序每行尽量要用一条语句来实现。
2.3 多个函数
#include <stdio.h>
void answer(void);
//void answer(void)
//{
// printf("Dad, I am watching TV, What's up?\n");
//}
int main(void)
{
printf("Rick, what are you doing?\n"); // Dad said
answer(); // son answer
printf("OK, Come here, I need your help!\n");
return 0;
}
void answer(void)
{
printf("Dad, I am watching TV, What's up?\n");
}
调用函数的方法一:
函数的声明,也叫函数原型。应为编译器对于C代码的编译是需要从上到下编译的,所以在调用函数之前需要对函数进行一次声明。
函数的调用。
函数的定义即函数具体实现的内容。
调用函数的方法二:
可以将函数的定义放到函数调用之前,就不需要进行函数的声明。
函数的调用不依赖于函数的位置。
第三章 数据和C
3.1 变量与常量
在程序运行过程中可能会变化或赋值的数据称为变量。
在程序运行之前被设定为在整个运行过程中无变化的数据称为常量。
3.2 数据类型
在绝大多数情况下,计算机基本的存储单位是一个字节。在进行嵌入式开发的时候,地址增加一,单位就是一个字节。
一个字节是为等于八位。
3.2.1 int类型
int类型的大小取决于计算机的处理器的位数。目前32/64位操作系统中int型的数据占32位,4字节(-2147483648~2147483647)
ISO/ANSI C规定int类型的取值范围为-32768到32727。
初始化int型变量就是为变量赋一个初始值,即对变量进行赋值操作。可以在声明语句中初始化变量。
应该避免在一个声明语句中同时出现初始化变量和未初始化变量。
int型通过格式说明符%d来进行打印。==必须确保格式说明符同打印值数目相同。==否则会指向内存中的任意位置。
第四章 字符串和格式化输入输出
第五章 运算符、表达式和语句
第六章 循环
第七章 分支和跳转
第八章 字符输入/输出和输入验证
第九章 函数
第十章 数组和指针
10.1 数组
数组由数据类型相同的一系列元素组成。要访问数组中的元素,可以通过使用数组下标数(也称为索引)来表示数组中的各元素。数组元素的编号从0开始。
10.1.1 初始化数组
数组的初始化用以逗号分隔的值列表(用花括号括起来)来初始化数组,各值之间用逗号分隔。
使用const声明数组:程序在运行过程中不可以修改数组的内容,及不可以再给她赋值。
使用数组前,必须进行初始化(赋初值)。编译器使用的值是内存相应位置上的现有值。如果不初始化,其中储存的都是垃圾值。
当初始化列表中的值少于数组元素的个数时,编译器会把剩余的元素都初始化成0。
当初始化列表中的值大于数组元素的个数时,编译器会报错。
可以通过省略方括号中的数字,让编译器自动匹配数组大小和初始化列表中的项数。但是无法察觉初始化列表中的项数有误。
数组元素的个数 = sizeof(数组名)/sizeof(数组名[0])
10.1.2 指定初始化器(C99)
可以通过指定初始化器,初始化指定的数组元素。相较于传统的C语法,在初始化相应位置的元素前必须初始化其之前的所有元素。
如果指定初始化器后面有更多的值,那么后面的值将被用于初始化指定元素后面的元素。
如果再次初始化指定的元素,那么最后的初始化将会取代之前的初始化。
通过省略方括号中的数字,让编译器自动匹配数组大小和初始化列表中的项数,编译器会把数组大小设置为足够装下初始化的值。