我学习C语言的笔记和心得
本帖最后由 叮当 于 2015-12-12 21:29 编辑大家好,我是叮当,我给大家分享我学习C语言的笔记,如果有其他编程语言的基础,看我的笔记可以快速地掌握C语言,如果有错误的地方,不吝赐教。
以下内容是一次性写出来,可能有错误之处,希望发现及时指正本人
一、变量常量及宏
C语言的变量,必须:在使用前定义,并且确定类型
变量格式 ;数据类型 变量名=数据;
宏定义格式;#define 常量名 数据;
宏定义一般要大写,好区分变量和常量
#define叫宏定义,不叫常量
常量的定义:
const 数据类型 变量名=数据;
const 限定变量不允许改变
二、数据类型
C语言的类型
整数型:short int ---- 2字节
int ---------- 4字节
long
long long ---- 8字节
字符型;char ---- 1字节
浮点型:float、double、long double
逻辑型:bool
指针型
自定义类型
C99新引入的有:long long、long double、bool
sizeof是一个运算符,给出某个类型或变量在内存中所占据的字节数
三、流程控制
if(表达式)
{
语句1;
语句2;
语句n;
}
if(表达式)
{
语句1;
语句2;
语句n;
}else
{
语句1;
语句2;
语句n;
}
if(表达式)
{
语句1;
语句2;
语句n;
}else if
{
语句1;
语句2;
语句n;
}
switch (表达式)
{
case 常量表达式:语句1;
break;
default: 语句;
}
一、for
for语句的格式为:
for (初始化语句; 条件语句; 控制语句)
{
语句1 ;
语句2 ;
语句n ;
}
二、while
while先判断后执行
while语句的格式为:
While(循环条件判断)
{
语句1 ;
语句2 ;
语句n ;
}
三、do while
do while语句先执行后判断
do while语句的格式为:
do
{
语句1 ;
语句2 ;
语句n ;
}while(循环条件判断)
break
break如果用于循环是用来终止循环
braak只能终止包裹最里面的那个循环语句
break如果用于switch,则是用于终止switch
braak只能终止最最近的那个switch
break不能直接用于if,除非if循环内部的一个子句
continue
continue用于跳出循环余下的语句
四、函数
函数
为什么需要函数
避免重复性操作
有利于程序模块化
什么叫函数
概念上:能够完成特点功能的独立代码块
编程上:能接收数据[也可以不接收数据]
能够对接收的数据进行处理
能够将数据处理的结果返回[也可以不返回]
函数可以当作一个黑匣子
如何定义函数
函数的返回值 函数名字(函数的形参)
{
函数的执行体
}
return 表达式:含义
1.终止被调函数,向主调函数返回表达式的值
2.如何表达式为空,则只终止函数,不向函数返回任何值
3.break是用来终止循环和switch的,return是用来终止函数的。
4.函数的返回值必须以函数定义的函数返回值类型为准
函数的分类
1.有参函数和无参函数
2.有返回值函数和无返回值函数
3.库函数和用户自定函数
4.普通函数和主函数(main)
一个程序必须有且只能有一个主函数,主函数可以调用普通函数,普通函数不能调用主函数,普通函数可以相互调用,主函数是程序的入口也是出口。
函数注意的问题
1.调用函数前要先声明,可以先声明,在写函数执行体
2.库函数通过#include<库函数所在的名字.h>
3.形式参数和实际参数
个数相同 位置一一对应数据类型必须互相兼容
五、数组
定义数组:类型 变量名称[元素数量];
元素数量必须是整数
使用数组时放在[]中的数字叫做下标或索引,下标从0开始计数
数组是一种容器,特点是:其中所有的元素具有相同的数据类型;一旦创建,不能改变大小
数组中的元素在内存中是连续依次排列的
二维数组,通常理解为是个平面,例如 int a,表示列也就是坐标轴的x,表示行也就是坐标轴的Y
6指针与动态内存分配
指针的定义:数据类型 * 变量名;
指针
指针就是地址,地址就是指针。
指针变量存放的就是内存单元编号的变量,也可以说指针变量是存放地址的变量。
指针和指针变量不一样,指针是地址,指针地址是存储地址的变量。
基本类型指针
int a=5;
int * p;
p=&a
printf("%d",*p)
int * p是指针变量,指针是地址,int a中的a就是地址,&a就是取a的地址也就是取a的指针。
*p是取指针变量的存储的地址的值。
指针和指针变量是不一样的。指针就是地址,地址是内存单元的编号。
*的含义
1.乘法 2.定义指针变量 int * p;int *是变量的数据类型,表示p只能存放int类型变量的地址
3.指针运算符:该运算符放在定义好的指针变量前面,如果p是一个已经定义好的指针变量,那么*p,是取出指针p指向的地址的值。
基本类型指针实现两个变量的值互换
#include<stdio.h>
void huhang(int * p,int * q)
{
int c;
c=*p;
*p=*q;
*q=c;
}
int main(void)
{
int a=1,b=2;
huhang(&a,&b);
printf("%d %d",a,b);
return 0;
}
2.指针和数组
指针和一维数组
一维数组名
一维数组名是个指针常量,它存放的是一维数组的第一个元素的地址
下标和指针的关系
int a={0,1,2,3,4};
int * p;
p=a;
int i=1;
printf("%d\n",p);
printf("%d",*(p+i));
如果p是个指针变量,则p等价于*(p+i)
int i=5;
int * p=&i;
int ** q=&p;
int *** m=&q;
***m=10;
printf("%d",***m);
动态内存分配函数malloc需要malloc.h
int * p =(int *)malloc(int len)
本语句分配两块内存,int * p是静态内存,占4个字节,另外一块是动态分配的,总共len个字节。
malloc:int * p = (int *)malloc(4)
1. 要使用malloc函数,必须添加malloc.h这个头文件
2. malloc函数只有一个形参,并且形参是整型
3. 4表示请求系统为本程序分配4个字节
4. malloc函数只能返回第一个字节的地址
5. 分配了8个字节, p变量占4个字节, p所指向的内存也占4个字节
6. p本身所占的内存是静态分配的, p所指向的内存是动态分配的
int i =5;
int * p=&i;
free(p)把p指向的地址释放掉
free():含义--->释放动态内存。freep(p)表示把p所指向的内存给释放掉。p本身的内存是静态的,不能由程序员手动释放。
静态内存和动态内存的区别
静态内存是由系统自动分配的,由系统自动释放,静态内存是在栈分配的。
动态内存是由程序员手动分配,手动释放的,动态内存是在堆分配的。
七、结构体
声明结构体的形式
struct 结构体名
{
结构体成员
};
结构体初始化的三种方式
1.定义并初始化:struct 新数据类型的名字 结构体名字 = {结构体成员};
2.struct.新数据类型的名字 结构体名字;
新数据类型的名字.成员1=数据
新数据类型的名字.成员2=数据
新数据类型的名字.成员n=数据
3.struct.新数据类型的名字 结构体名字;
struct.新数据类型的名字 * 结构体名字=&结构体名字;
结构体名字->结构体成员=数据
总结的挺好,期待楼主的视频教程。 小白来学习 收到,辛苦了 顶下楼主的帖子吧。虽然我不学这个C语言的。有没有java的学习资料啊? 静忍 发表于 2015-12-12 22:00
顶下楼主的帖子吧。虽然我不学这个C语言的。有没有java的学习资料啊?
没学过java,不知道敢说什么资料好,不过学完C,学习其他编程语言会很快上手 叮当 发表于 2015-12-12 22:03
没学过java,不知道敢说什么资料好,不过学完C,学习其他编程语言会很快上手
这个网站是干什么的啊?我怎么不太看到懂帖子什么意思呢? 楼主你的C语言学习资料可以分享下么。我也在学。就是找不到好的资源 请叫我丶马先森 发表于 2015-12-12 22:12
楼主你的C语言学习资料可以分享下么。我也在学。就是找不到好的资源
看C primer plus就行了 期待出个系列视频{:6_225:}
页:
[1]
2