C语言基础阶段总结:
关键字(32个)
系统预先定义好的,有特殊含义的,全部都是小写,不能重新定义(int a; 不可以int int)
数据类型:char short int long float double struct union enum void
控制语句:if else for while switch case default do break continue goto
存储类型:auto static extern register
const:只读
Return:返回函数
Signed:有符号数
Unsigned:无符号数
Sizeof:计算所占内存空间的大小(单位:字节)
typedef:给已有的类型起别名
volatile:防止编译器优化
标识符
程序员自己定义的,一般用来定义变量,函数名;
命名规范:(见名知意)
1.由数字,字母,下划线组成
2.第一个不能为数字
3.不能和关键字重名
基本数据类型
32OS:
字符型:char(1字节)
整型:short(2字节) int(4字节) long(4字节)
浮点型:float(4字节) double(8字节)
64OS:
字符型:char(1字节)
整型:short(2字节) int(4字节) long(8字节)
浮点型: float(4字节) double(8字节)
转义字符
名字
存储类型 数据类型 变量名;
存储类型:决定了开辟的内存空间在内存中的哪个分区
存储类型:auto static extern register
数据类型:决定开辟的内存空间的大小
变量名:决定的是开辟的内存空间的
运算符
单算移关与,异或逻条赋
单目运算符,算数运算符,左移右移,关系运算符,按位与,异或(^),按位或,逻辑运算符,条件运算符,赋值
输入输出
函数:有独立功能的模块
标准输入输出函数:scanf. Printf (对变量的类型没有限制)
输入:从键盘拷贝数据到内存中
输出:从内存中拷贝数据到显示屏
输出
printf(“格式控制串”,输出表);
格式控制串:原样输出的内容+格式化符
输出表:要输出的内容
整型:
%d:以十进制进行输出
%o:以八进制进行输出
%x(X):以十六进制进行输出
#:自动在八进制和十六进制前添加前缀
%u:无符号整型
%hd:short类型
%ld:long类型
%lld:long long 类型
字符型:
%c:字符型
浮点型:
%f:float
%lf:double
%e:指数
%g:选择小数和指数较短的一个进行输出
%.nf:保留小数点后n位进行输出(不写.n默认小数点后6位)
输入
Scanf(“格式控制串”,地址表);
字符输入输出
输入字符:
getchar()
返回值:输入的字符的ascii码值
Char a;
a = getchar();
输出字符:
Putchar(字符的ascii值);
//输出ascii值对应的字符
Putchar(a);
三大结构:
顺序结构、选择结构、循环结构
顺序结构
语句按照一定的先后顺序去执行
选择结构
单分支if选择结构
if(表达式)
{
语句;
}
先判断表达式是否为真,如果为真,执行语句;
双分支if语句结构
if(表达式)
{
语句1;
}
else
{
语句2;
}
多分支if语句结构
If(表达式1)
{
语句1;
}
else if(表达式2)
{
语句2;
}
else if(表达式3)
{
语句3;
}
。。。。
else if(表达式n)
{
语句n;
}
Else
{
语句n+1;
}
switch语句
switch(表达式)
{
case 标号1:
语句1;
case 标号2:
语句2;
。。。。。
case 标号n:
语句n;
default:
语句n+1;
}
注意:
表达式不能为float类型
标号必须为常量
当表达式等于标号的时候,执行冒号后面的语句,(如果都不相等,则执行default后面的语句)直到switch,case语句结束为止,或者遇到break语句结束!!
循环结构
循环:重复去做一件事
循环三要素:循环的起始条件,循环的终止条件,循环变量的变化
for循环
for(表达式1;表达式2;表达式3)
{
循环体;
}
表达式1:循环变量的起始条件
表达式2:循环变量的终止条件
表达式3:循环变量的变化
先执行表达式1,然后在执行表达式2,如果表达式2为真,就执行循环体,然后再去执行表达式3,如此反复,直到表达式2为假,终止循环。
while语句
While(表达式)
{
循环体;
}
do while语句
do
{
循环体;
}while(表达式);
先去执行循环体,然后判断表达式是否成立,如果成立,则执行循环体,否则,跳出循环。
案例:用do while实现1-100之和
数组:
概念
定义一千个int类型的变量:挨个定义,起名字?
一组数据类型相同的元素的集合
特点:1.数据类型相同 2.地址连续
部分初始化
Int a[5] = {1,2,3};
a[0]=1,a[1]=2,a[2]=3,a[3]= ?,a[4]=?
当我们对数组进行部分初始化时,没有初始化的部分,其值为0
全部初始化
Int arr[5]= {1,2,3,4,5};
Int brr[ ] = {1,2,3}; //编译器会自动计算元素的个数
总结:1、数组定义在函数体内,相当于(局部变量),没有初始化,其中的值为随机值
2、数组定义在函数体内,用static进行修饰,相当于(局部变量被static修饰),没有初始化,其值为0;
*和&互逆
- 字符数组:
-
整形数组:(可以保存一堆整形数)
字符数组:(可以保存一堆字符)
存储类型 数据类型 数组名[元素的个数];
Int arr[10];//此时定义了一个名为arr的数组,数组中可以存储10个int类型的元素
1,2,3,23,45
c语言中如果要存储字符串?
“hello” -----> ‘h’ ‘e’ ‘l’ ‘l’ ‘o’ ‘\0’(单个字符)
“h”----->’h’ ‘\0’
此时:要保存一堆字符:定义字符数组
存储类型 数据类型 数组名[元素的个数];
Char str[20];
数据类型:元素的数据类型(char)
数组的数据类型:char [20];
Int arr[10]={1,2,3,4,5};
部分初始化:char str[20] = {‘h’,’e’,’l’,’l’,’o’,’\0’ };
没有初始化的部分:‘\0’== 0 (注意区分’\0’, 0 , ’0’的区别)
char str[20] = {‘\0’};//字符数组清零
Char str[10]={‘h’,’e’,’l’,’l’,’o’};
Char str[10] = “hello”; //直接将字符串保存在字符数组中
-
二维数组:
概念
首先:是一个数组
数组特点:1.数据类型相同 2、地址连续
字符数组:所有的元素的数据类型为:char
整形数组:所有的元素的数据类型为:int
二维数组(数组数组):所有元素的数据类型:int [一维数组元素的个数]
二维数组:本质就是所有元素都为一维数组的一个一维数组
(二维数组中的所有一维数组:一维数组的元素的个数必须相同)
定义
定义一个一维数组:
存储类型 数据类型 数组名[元素的个数];
Int arr[5];
数组数据类型:int [5];
定义二维数组:
存储类型 数据类型 数组名[一维数组的个数];
int brr[行数][列数];
数据类型:最里面的元素的数据类型
行数:一维数组的个数(二维数组中有几个一维数组)
列数:一维数组中有几个元素
Int a[2][3];//此时相当于定义了一个二维数组,这个二维数组中有2个一维数组,每个一维数组中有3个元素
二维数组数据类型: int [2][3]
真正的元素个数:行数*列数
所占内存空间的大小= sizeof(数据类型)*真正的元素的个数
函数的分类
库函数
Printf scanf strlen....
调用函数
引入头文件
#include <stdio.h>、 #include <string.h>
调用函数
Strlen(数组名);
Strlen ( str );
返回值:字符串的实际长度,定义一个int类型的变量,去接受返回值
函数名(实际参数);
注意:参数有多少个,参数数据类型是什么,返回值
自定义函数
定义函数
存储类型 数据类型 函数名(形式参数列表)
{
函数体;
返回值;
}
数据类型:函数返回值的数据类型
函数名:标识符(命名规则)(见名知意)
形式参数列表:实现这个功能,需要传递的参数
函数体:具体实现功能
返回值:若没有返回值,void。如果有返回值!有且只能有一个!!!!
调用函数
函数名(实际参数);
注意:
- 需要将实参的值拷贝给形参,实参的个数以及数据类型必须和形参一样
- 实参可以使变量,常量,表达式,但是必须是一个给定的值
- 实参和形参是两块独立的内存空间(所以实参和形参可以重名)
- 传参实际上是将实参的值拷贝给形参
- 形参是局部变量,在函数调用的时候开辟空间,函数调用完毕之后,释放空间
-
指针是什么?
指针是一个数据类型,他是一个用来保存地址的数据类型
Int a;//a用来保存整形数的变量
Float b;//b用来保存浮点数的变量
Char c;//c用来保存字符的变量
指针定义一个变量;//变量是用来保存地址的数据类型
一个变量的地址:&+变量名
地址是什么?
内存分配的最小单元:字节。地址就是内存单元的编号。我们把内存单元的编号就叫做地址
地址的本质:内存单元的编号
指针:地址
指针的本质:内存单元的编号
地址就是指针
指针就是地址
0x100是指针?
0x100是指针,但是他是指针常量指针 p=0x100;//p指针变量
0x100;//指针常量
Int a = 10;-----》a整型变量
10//整型常量
定义
存储类型 数据类型 变量名;
Int a;
存储类型 数据类型 *指针变量名;
Int *p;
*(是一个指针)
数据类型:指针指向的数据的数据类型
Int a = 10;
a:int
10:int
数据类型:去掉变量名,剩下的就是数据类型
*表示我定义的变量是一个指针
*的作用:
- 表示指针这种数据类型
- 双目运算符:乘法
- 单目运算符:取值(*地址)