吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 2997|回复: 19

[C/C++] 我学习C语言的笔记和心得

  [复制链接]
叮当 发表于 2015-12-12 21:25 | 显示全部楼层 |阅读模式

本帖最后由 叮当 于 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[3][4],[3]表示列也就是坐标轴的x,[4]表示行也就是坐标轴的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[5]={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.新数据类型的名字 * 结构体名字=&结构体名字;

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


评分

参与人数 17HB +39 THX +14 收起 理由
消逝的过去 + 2
创客者V2.0 + 1
后学真 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
agan8888 + 1
a782327339 + 1 + 1 复制复制emm
圈瞳 + 1 + 1 分享精神,是最值得尊敬的!
sunlewuyou + 2 + 1 评分=感恩!简单却充满爱!感谢您的作品!
多弗朗明豪 + 5 + 1 虽然看不懂不过感觉值得收藏!
倾心的航哥最帅 + 1 + 1 说的很详细
bavjchenxu + 1 + 1 评分=感恩!简单却充满爱!感谢您的作品!
Elegant + 1 + 1 学破解论坛1周年了,感谢大家的付出与关注。学破解论坛助你呼风唤雨!!!
tuo + 1 + 1 欢迎原创软件增加“学破解论坛专版”,额外增加20HB,么么哒~
退隐鱼忆_ + 3 + 1 我喜欢你
pnccm + 4 + 1 不错比较做的很好很到位
Aniz + 4 + 1 评分=感恩!简单却充满爱!感谢您的作品!
不常来,求不封 + 1 + 1 总结的不错,结合具体实例就更好了
Shark恒 + 10 + 1 总结的挺好,期待楼主的视频教程。

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Shark恒 发表于 2015-12-12 21:30 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
af9922 发表于 2015-12-12 21:48 | 显示全部楼层

小白来学习
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
D小僵尸 发表于 2015-12-12 21:59 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
静忍 发表于 2015-12-12 22:00 | 显示全部楼层

顶下楼主的帖子吧。虽然我不学这个C语言的。有没有java的学习资料啊?
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| 叮当 发表于 2015-12-12 22:03 | 显示全部楼层

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

没学过java,不知道敢说什么资料好,不过学完C,学习其他编程语言会很快上手
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
静忍 发表于 2015-12-12 22:09 | 显示全部楼层

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

这个网站是干什么的啊?我怎么不太看到懂帖子什么意思呢?
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
请叫我丶马先森 发表于 2015-12-12 22:12 | 显示全部楼层

楼主你的C语言学习资料可以分享下么。我也在学。就是找不到好的资源
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| 叮当 发表于 2015-12-12 22:26 | 显示全部楼层

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

看C primer plus就行了
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
標題黨 发表于 2015-12-12 22:53 | 显示全部楼层

期待出个系列视频
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表