① 有关c语言方面的书籍有什么
1、《C语言入门经典(第5版)》:2013年清华大学出版社出版的图书,作者是Ivor Horton。第五版是全新推出的最新版本,全书融合了作者多年的编程经验,给人一种深入浅出的感觉,适合初学者;
2、《C语言编程:一本全面的C语言入门教程(第三版)》:本书是C语言入门经典教材,其第一版发行至今已有20年的历史。本书内容详实全面,由浅入深,示例丰富弊肆,并在每个章节后面附有部分习题,非常适合读者自学使用;
3、《C语言从入门到精通》:租迹轿以零基州乱础讲解为宗旨,用实例引导读者深入学习,深入
② C语言学习资源整理
C语言学习资源汇总
一、C语言入门课程
1.实验楼一C语言入门教程
教程+在线开发环境的方式,教程文档详细的讲解C语言基础知识,在线开发环境和本地一样,可以梁握随时动手跟着教程操作,动手学习的方式非常适合入门初学者。
2.gitbook一一笨方法学C
内容较完整丰富,相当于一本书籍了,适合新手入门学习。
3.菜鸟教程一C 语言教程
纯在线文字教程,讲解的不是那么详细,不过简单易懂,适合入门初学者学习,看完后可对C语言有个大概的认知。
4.幕课网--C语言入门
教程+"环境",讲解的比较细致,也很简单易懂,跟着教程可傻瓜式操作学习,适合入门新手。局渣盯
5.网易云课堂一-C语言基础入门
纯视频方式,每个视频15分钟左右,介绍的比较详细,如果喜爱看视频来学习的话,可以看看。
二、C语言实战项目
免费的项目教程:
C语言制作2048;
C语言快速实现五子棋、斗地主的发牌器;
C语言制作简单计桐和算器;
用 C语言编写自己的编程语言。
三、C语言笔记文章整理
学完基础、做完项目之后,就会有各种问题,这个时候就需要学习笔记啦,或自己总结,或看别人的总结都可以。
1.C 语言中的指针和内存泄漏。
2.如何写出优美的 C 代码。
3.C语言的整型溢出问题,酷 壳 - CoolShell.cn。
4.易被遗忘的C/C++要点总结。
5.C/C++的mem函数和strcpy函数的区别和应用。
6.C语言的变量作用域及头文件。
7.10个经典的C语言面试基础算法及代码。
四、其他资源
再整理一些资源,零七碎八的,对于学习C语言的过程中会很有帮助的。
1.awesome-c(英文)、awesome-c-cn(中文版)
2.源码阅读--十个C开源项目。
3.一千行以下有哪些值得学习的小型开源项目? - 互联网-知乎。
4.值得推荐的C/C++框架和库。
5.C与 C++ 的真正区别在哪里?
6.初学者的编程自学指南。
7.免费学习编程的10个好工具。
8.11款学习编程的好玩的浏览器游戏(译)。
9.每个程序员都应该收藏的算法复杂度速查表。
③ 急求c语言教程和c程序设计的抽象思维这两本书的电子版,txt. pdf. 链接都行。。。作者是
C语言解析教程(原书第4版)(美) 凯利.pdf
http://download.csdn.net/download/oqqdove1/5707875
④ c语言全面解析指针,十个知识点整理
C语言10个小知识了解指针
1.若有代腔亏码,int a=10,*p;p是指针:也是一个变量,且是一个只能用来存放地址的变量。
2.若有代码,int a=10,*p;p=&a;当执行了上面的代码,会说“p指向了a”,其实就是“p指针变量存放了a的地址”。
3.两个*的区别,有如下代码:inta=10,*p;//该处的* 说明p是一个指针变量用来存放地址p=&a;*p=*p+1;//该处的* 表示p所指的变量中的值即a的值10。
总结: 变量定义时的* 说明该变量是一个指针,调用语句中的*表示指针指向的变量中的值。[此处是比较容易混淆的]。
4.int a=10,*p;p=&a;则:*p=*p+1;//等价:*p +=1;(0)++++(*p);表示的内容相同,都是p所指变量的值+1。
5. *p++和(*p)++的区别是: 等价于* (p++),先获取 p当前所指元素的值,然后p指针+1(p指针向后移动一个单元,一般用在数组中,普通变量会越界);后者仅仅是p所指变量的值+1。
6.定义变量时,一个*说明该变量是指针,两个*说明该变量是指向指针的指针(存放的是指针变量的地址)。int a=10,*p,**q;p=&a;//p指向a,*p的结果是10,q=&p;//q 指向p,* q的结果是p的地址值,**G的结果才是10。
7.如果调用函数传递的是地址,那么被调函数中形参就需要使用指针接收,在函数中对指针所指变量值的改变,会影响到调用函数中的变量值。
8.一维数组名和指针的区别,有定义:int a[10],*p;
p=a;//合法,因为,一维数组名存的是数组首地址,这样使 p指向了a首地址,也就是第一个元素的地址。
a++; / /不合法,因为a是一个地址常量,开辟了就不能再修改了,一切给数组名字赋值的操作都是非法的。
p++://合法,因为p是一个指针,p++表示从当前向后移动了一个位置。
对于上面的定义,a[i] 、* (ati)、* (p+i)、p[] 都是茄告合法,都是取下标为i的元素值。所以: p++; 是使指针向后移动,(*p) 十+是当前所指变量的值内容+1。
9.若有定义:int a[3][22],*p[3],iJ;*p[3] 中[优先级[高于*,说明p是一个数组名,前面的*说明该数组中每个元素都用来存放指针,这叫指针数组。如果p和a产生联系,则只能通过逐个伍纳神赋值的方式完成,即: for(i=0;i<3;i++)p[] =a[; //合法,因为a[] 是二维数组中每行的首地址,所以可以存放到p数组中。
但是 p=a;是非法的,因为a是地址,p是数组的名字,并不是指针名下面获取数组元素的方式都是合法的:*(p[i]+j)*(*(p+i)+j) (*(p+i))[j]。
10.若自定义函数的实参是一维数组名,则该函数的首部可以写成: fun(int al) fun (int a[M]) fun(int*a) M表示长度,若有自定义函数的实参是二维数组名,则该函数的首部可以写成: fun(int (*a)[N])。
fun(int al[N]) fun(int a[M][NJ) M表示行数,N表示列数,若有指针数组作为fun函数的实参,则该函数的首部可以写成:fun(int *a[M]) fun(int *al) fun(int**a)。