C言语个人总结
C语言个人的总结一部分,很杂乱,适合自己看。有错误的地方还需要多多补充纠正!
什么是面向过程以及面向对象?
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
面向对象(Object Oriented,OO)是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。“面向对象”是专指在程序设计中采用封装、继承、抽象等设计。
C语言中大小点的部分自我总结
输出就要用到<stdio.h>;
int short类型数据过大会出现溢出;
E=10 用法:aEn,a必须有小数点;
%d整形形式,%f浮数点形式,%lf double形式;
字符常量是单引号括起来的一个字符,如‘e’;
ASC2码A为65,Z为90,a为97,z为120;
转换有强制转换和自动转换,不同类型运算要转换为同一类型,精度不一样也要转换(char和short参与运算必须转换为int);
char short(8位)->int(32位)->unsigned(64位)->long(64位)->double(64位) 自动转换规则;
=运算符 都是从右向左 ++i i先增加1再参与其他运算 i++参与运算后再+1;
getchar 从键盘上获取字符 putchar输出字符;
==等于 !=不等于 &&与(两个为真才为真 其中一个假都是假) ||或(一个为假为真,两个未假才为假) !非
a && b:a和b同时为true 才返回 true, 否则返回false;a || b:a或b任意一个为true 就返回true , 否则返回false;
条件表达式 a>b?a:b 从右向左;
switch语句使用的大概方法:a为条件或条件表达式 1为判断条件,符合输出跳出,不符合default跳出
switch(a){
case 1:prinft(“XXXXXXX”);break;
case 2:prinft(“XXXXXXX”);break;
default:prinft(“XXXXXXX”);
}
while,do while,for,goto和if组成的 都是循环语句;
goto使用 goto 语句标号;while语句的条件为真则一直循环 假跳出;
一维数组 int a[10] 类型说明符 数组名【常量表达式】数组下标永远从0开始;
初始化赋值 类型说明符 数组名【常量表达式】={值,值,值。。。。。。。};
动态赋值:scanf(“%d\n,a[i]”)for循环
二维数组 类型说明符 数组名【常量表达式】【常量表达式】从【0,0】开始的。行列;
赋值:类型说明符 数组名【常量表达式】【常量表达式】={{1,2,3,4,},{1,2,3,4,},{1,2,3,4}};或{1,2,3,4,5,6};或{{1},{2},{3}}
如果数组未能全部赋值 其他数值会自动填充为0
二分法(可以查找) 冒泡法(可以排序)
宏定义 列如:#define M 10 没有分号
无参函数定义:类型标识符 函数名(){声明部分;语句部分;}
有参函数定义:类型标识符 函数名(形式参数表列){声明部分;语句部分;}
空函数定义:类型标识符 函数名(){}
形参:在函数定义(int a,intb)中的
实参:在主函数调用函数(a,b)中的
函数调用:1.无参函数直接用 例子:inset();2.函数表达式c=2*max(a,b);3.函数参数:c=max(a,max(b,c));
迭代法(12345)和递归法(计算5!)(汉诺塔问题)
数组元素作函数实参 数组名作函数参数
局部变量和全局变量
静态存储方式是指程序运行期间由系统分配固定的存储空间的方式
动态存储方式是程序运行期间根据需要进行动态分配存储空间的方式
存储方式分为两大类:静态存储和动态存储。具体分为四种:auto 默认自动,static,register寄存器,extern外部的
static静态局部变量在编译时赋初值,只赋初值一次,在程序运行时已有初值,不会重复赋值,而是保留上次函数调用结束时的值。还可以使一个全局变量捆绑在一个文件里面从而不被其他文件所调用。
register局部变量会提高运行速度。
定义变量(int a)要建立存储空间,声明(extern a)则不用。
局部变量:自动变量(动态局部变量 int a 离开函数,值就消失),静态局部变量(离开函数,值依然保留),寄存器变量(离开函数,值就消失),形参可以定义为自动变量或者是寄存器变量。
作用域(空间角度):全局变量:静态外部变量(只限本文件引用),外部变量(用extern可以使其他文件引用(非静态的外部变量))。
生存期区分(时间角度):静态存储是整个函数运行时间都存在,而动态存储则是在调用函数临时分配单元;动态存储:自动变量,寄存器变量,形式参数(本函数内有效);静态存储:静态外部变量(本文件内有效),静态局部变量(函数内有效),外部变量(其他文件可引用)。
内部函数外部函数,用static声明则是内部函数。static int a(int b);extern int fun(int a)。没有extern默认为外部函数。
’\0’是判定字符数组结束的标识,表示这串字符到结尾了;注意:在字符数组中’\0’是占一个位置的!
指针
指针:*取值操作符 &取址操作符
变量的地址称为该变量的指针;定义:类型说明符 *名称;如:float *pointer_3;
(*demo_1)++同等于demo_1++
#(a+i)取出数组的值
C语言调用函数时虚实结合的方法都是“值传递”。变量名作为函数参数传递的是变量的值,数组名作为函数参数传递是地址,所以要求形参为指针。
字符数组有若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址(字符串的第一个字符的地址),决不是将字符串放到指针变量中;字符指针可以采用char *a; a=“i love you”;注意a不是字符而是字符串的第一个元素的地址。
指针变量的值是可以改变的;若定义了一个指针变量并指向一个字符串,可以使用下标形式引用指针变量所指的字符串的字符。
#fi(1) #endif预编译 1可以运行 改为0相反。
指向函数的指针:int max(int a,int b);int(*p)();p=max; c=(*p)(a,b);
文件包含:1.一个include命令只能指定一个被包含文件,若有多个则需要多个include命令。2.文件包含允许嵌套即在一个包含的文件又可以包含另一个文件。#iclude<a.h#include<b.h>>???待查阅
#include<>从包含目录去查找 #include“”从源文件查找再去包含目录查找。
条件编译:#ifdef 标识符 程序段1 #else 程序段2 #endif 如果没有程序段2 可写为#ifdef 标识符 程序段1 #endif
#ifndef 标识符 程序段1 #else 程序段2 #endif 日后如看不懂 查找例子来理解。
#if 常量表达式 程序段1 #else 程序段2 #endif
int 内存中占4个字节 char1个字节 float4个字节
结构体
结构体定义:
struct 结构名
{
成员列表;
};
成员必须做类型说明形式:类型说明符 成员名;
定义结构体类型变量的方法:
(1)先声明结构体类型在定义变量名
例如:struct(类型名) student(结构体) student1,student2;
(2)在声明类型的同事定义变量:
struct 结构体名
{
成员列表;
}变量名表列;
(3)直接定义结构类型变量:
struct
{
成员列表;
}变量名表列;
不出现结构体名。
结构体变量的引用:结构体变量名.成员名
结构体变量的初始化
结构指针变量说明的一般形式为:stuct 结构名 *结构指针变量名;
访问的一般形式:(*结构指针变量).成员名;结构指针变量->成员名;
(data*)malloc(sizeof(data)); malloc分配一个内存 和free()搭配使用。
关于链表的插入删除需要加强
。
typedef声明新的类型名来代替已有的类型名 例如:typedef int INTEGER
声明结构类型 TYpedef struct{ 内容}DATE;声明NUM为整形数组类型 typedef int NUM【100】;声明STRING为字符指针类型 typedef char* STRING;声明POINTER为指向函数的指针类型,该函数返回整形值 typedef int (*pointer());
文件
文件的关闭(fclose函数):函数调用:fclose(文件指针);
字符读写函数:fgetc和fputc;字符串读写函数:fgets和fputs;数据块读写函数:fread和fwrite;格式化读写函数:fscanf和fprintf;以上都需要包含头文件stdio.h
位运算符:&,|,^。