搜索
bottom↓
回复: 10

C经典书籍

[复制链接]

出0入0汤圆

发表于 2012-4-4 16:58:05 | 显示全部楼层 |阅读模式
C语言中的经典书籍:
建议:先看《C语言深度剖析》
再看《C和指针》
《C专家编程》
《C陷阱与缺陷》
《编程之美》,抓时间将《编程之美》上面的代码好好敲一下(强烈建议),我有相应的pdf,不过没有必要上传,网上有很多资源,在该网站和新浪上面可以迅速搜到。

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-4-5 10:59:05 | 显示全部楼层
希望楼主说的是有用的,先顶一下

出0入0汤圆

发表于 2012-4-5 14:55:39 | 显示全部楼层
c真是博大精深

出0入0汤圆

 楼主| 发表于 2012-4-11 22:21:31 | 显示全部楼层
还有一本就是C语言圣经《The C Programming Language》,要找时间将里面的所有代码好好敲一下,好好理解一下。

出0入0汤圆

发表于 2012-4-11 22:23:09 | 显示全部楼层
谢谢,收了

出0入17汤圆

发表于 2012-4-11 22:29:41 | 显示全部楼层
有时候感觉C语言限制还是太多,有要用汇编的冲动。
还有C语言功能有不强大,什么都要自己写。

出0入0汤圆

 楼主| 发表于 2012-4-11 23:25:52 | 显示全部楼层
在这里,我和大家分享下以前自己的一些学习中遇到的东西。这些都是我的不完全记录,希望对后来者有用。(也热切希望有高手将其宝贵的经验分享出来,让我多学习学习)

建议:要熟悉《C标准库》,那些函数能够快速的帮你们编出高效的代码,对C标准库的掌握程度是衡量一个人掌握C语言的一个重要标准之一。
《C语言程序设计:现代方法》也是一本很不错的书籍,不过我没有看过。

C语言的精华是:指针和位运算。我个人是以C语言入门,我的思想是“一通百通”,掌握好一门语言,对以后学习其他语言都很有帮助,学习C语言时要注重其思想,这是很重要的,对你以后学习其他语言也很有帮助,如C++、BASIC、PASCAL等。还有就是要养成一些良好的习惯,比如说画流程图、代码规范那些。也许你以后在学习其他语言的时候发现对你最有用的反而是你平时没有注意的,如流程图、代码规范等。

本人对代码撰写的一些建议:
1.从画流程图开始
2.格式雅观,缩进使用得当
3.尽量不使用typedef,unsigned char比uchar更容易让人理解
4.短小的代码尽量使用define
5.就C/C++而言,函数功能单一精准,函数内尽量不涉及全局变量
6.局部变量尽量命名简单,例如i、j之类的。全局变量注意命名规范,“__”等不可乱用
7.多使用现成的函数、子例程

在以后要注意“版权问题”那些,推荐使用的自由软件协议:GPL协议。


1、指针与引用的区别:
最本质的区别:定义了一个指针变量,编译器为他分配了的内存(32位系统下默认4字节),而一个引用是不占任何内存的。
从内存上来讲  系统为指针分寸内存空间,而引用与绑定的对象共享内存空间,系统不为引用变量分配内容空间。
指针初始化以后可以改变指向的对象,而引用定义的时候必须要初始化,且初始化以后不允许再重新绑定对象。
所以引用访问对象是直接访问。指针访问对象是间接访问。
如果pa是指针,那么*pa就是引用了。

2、指针是用来指向某个变量,而引用是给变量取个别名,其作用就如同typedef一样。
用引用作形参时在调用函数里就像操作实参一样,不需要考虑实参的地址问题

3、大端与小端、MSB与LSB
在嵌入式开发中,大端(Big-endian)和小端(Little-endian)是一个很重要的概念。假如现有一32位int型数0x12345678,那么其MSB(Most Significant Byte,最高有效字节)为0x12,其
LSB (Least Significant Byte,最低有效字节)为0x78,在CPU内存中有两种存放方式:(假设从地址0x4000开始存放)
方式1:  

内存地址
0x4000 0x4001 0x4002 0x4003

存放内容
0x12   0x34   0x56   0x78

方式2:
内存地址
0x4000 0x4001 0x4002 0x4003

存放内容
0x78   0x56   0x34    0x12
那么,方式1的存放形似称为大端模式(Big-endian),方式2的存放形似称为小端模式(Little-endian)。即,在大端模式下,数据的MSB存放在低地址;在小端模式下,数据的LSB 存放在低地址。

4、(《C语言深度剖析》里面总结的一些)
sizeof(int) = 4;//整型大小
int a[100];
sizeof(a[100]) = 4;//求数组单元占用空间
sizeof(a) = 400;//求数组占用空间
sizeof(&a) = 4; //求指针大小
sizeof(*p) = sizeof(int) = 4;//整型占用几个字节
sizeof(p) = sizeof(int*) = 4;//指针占用几个字节
*p+3是先取p的值,再加3,*(P+3)是去P后面3个位置的值
void *任何类型的指针都可以直接赋值给它,无需强制转换
例:void *P1;int *P2;p1 =P2;不能P2 = P1因为‘空类型’可以包容‘有类型’
加void 可以发挥代码的”自注释“作用
void不能进行指针算法操作,因为进行算法操作的指针必须确定知道其指针指向数据类型大小的,
也就是说必须知道内存目的地址的确切值。

5、signed int -2^31到2^31-1;
unsigned int 0到2^32-1
signed char -2^7到2^7-1
unsigned char 0到2^8-1

6、正数的补码与其原码一致,负数的补码:符号位为1,其余为该数绝对值的原码按位取反,然后加1;

int main(void)
{
        char a[1000];
        int i;

        for (i = 0; i < 1000; i++)
        {
                a[i] = -1-i;
        }
        printf("%d", strlen(a));
        return 0;
}//答案为255,因为a[255]=0;strlen与'\0'结束

7、break终止本层循环
continue终止本次循环
do-while先执行do后面的代码再判断while括号里的值

8、在多循环中,如有可能将长循环放在最内层,短循环放在最外层,以减少CPU跨切循环层的次数
循环控制在3行之内,超过的话,程序员的理解能力会极大的下降

9、double,Vc规定无论单精度和双精度,以%f输出时小数位后最多保留6位
'\"'表示双引号(转义字符) \a鸣玲                'a'与"a"前者在内存里占1个byte后者占2个byte
1,‘1’,“1” 第一个在32为系统下占4个byte;第二个是字符常量,占1个byte;第三个是字符串常量,占2个byte。

10、++i先加后用,i++先用后加;左移运算符《高位丢弃,低位补零.注:*p++是先*后加;*++p是先+后*;因为*与++的优先级相同,结合方向为自右向左因此等价于*(p++)

11、在32位系统下,不管怎样的指针类型,其大小都为4byte。例sizeof(void *)
我们完全有办法给某个内存地址写入数据
12、二维数组的地址问题:例:a[i][j],a[i]的首地址为&a[0] + i * sizeof(char) * 4
a[0]的首地址为 &a[0];a[1]的首地址为 &a[0] + 1*sizeof(char)*4;a[2]的首地址为 &a[0] + 2*sizeof(char)*4
a[i][j]元素的首地址为 a + i * sizeof(char) * 4 + j * sizeof(char);指针表示 *(*(a + i) + j)

13、一级指针保存的是数据的地址,二级指针保存的是一级指针的地址

14、含register 定义的变量(频繁使用的变量)储存与寄存器之中,不能取其地址,因为其没在内存之中。

出0入0汤圆

发表于 2012-4-13 10:27:23 | 显示全部楼层
求指教,哈哈,大学没认真学习,现在快毕业也得补补

出0入0汤圆

发表于 2012-4-13 14:58:45 | 显示全部楼层
the art of computer programming这本书还真的挺不错的,看了一点,还没看完

出0入0汤圆

发表于 2012-8-15 16:18:26 | 显示全部楼层
      mark

出0入0汤圆

发表于 2012-8-15 19:53:44 | 显示全部楼层
石境Per 发表于 2012-4-11 23:25
在这里,我和大家分享下以前自己的一些学习中遇到的东西。这些都是我的不完全记录,希望对后来者有用。(也 ...

好东西 楼主帮我复习了下啊
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 22:19

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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