叮当 发表于 2015-12-12 21:25

我学习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.新数据类型的名字 * 结构体名字=&结构体名字;

结构体名字->结构体成员=数据


Shark恒 发表于 2015-12-12 21:30

        总结的挺好,期待楼主的视频教程。

af9922 发表于 2015-12-12 21:48

小白来学习

D小僵尸 发表于 2015-12-12 21:59

收到,辛苦了

静忍 发表于 2015-12-12 22:00

顶下楼主的帖子吧。虽然我不学这个C语言的。有没有java的学习资料啊?

叮当 发表于 2015-12-12 22:03

静忍 发表于 2015-12-12 22:00
顶下楼主的帖子吧。虽然我不学这个C语言的。有没有java的学习资料啊?

没学过java,不知道敢说什么资料好,不过学完C,学习其他编程语言会很快上手

静忍 发表于 2015-12-12 22:09

叮当 发表于 2015-12-12 22:03
没学过java,不知道敢说什么资料好,不过学完C,学习其他编程语言会很快上手

这个网站是干什么的啊?我怎么不太看到懂帖子什么意思呢?

请叫我丶马先森 发表于 2015-12-12 22:12

楼主你的C语言学习资料可以分享下么。我也在学。就是找不到好的资源

叮当 发表于 2015-12-12 22:26

请叫我丶马先森 发表于 2015-12-12 22:12
楼主你的C语言学习资料可以分享下么。我也在学。就是找不到好的资源

看C primer plus就行了

標題黨 发表于 2015-12-12 22:53

期待出个系列视频{:6_225:}
页: [1] 2
查看完整版本: 我学习C语言的笔记和心得