首页
社区
课程
招聘
[原创]C语言学习抄书笔记
发表于: 2013-4-10 12:23 42909

[原创]C语言学习抄书笔记

2013-4-10 12:23
42909
收藏
免费 6
支持
分享
最新回复 (81)
雪    币: 250
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
51
多交流哈~~
2013-5-5 10:26
0
雪    币: 250
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
52
谢~
字数字数
2013-5-5 10:27
0
雪    币: 2503
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
53
东西 不错 楼主 辛苦了 谢谢楼主的分享!
2013-5-5 11:14
0
雪    币: 250
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
54
谢谢鼓励~~
2013-5-8 21:06
0
雪    币: 250
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
55
    这本书是去年晃书店的时候随手拿的一本。虽说在这里有违学习经典的原则,但毕竟不厚,也不好浪费。顺手抄一下吧。

第一章 C语言指针

1.1 C语言的灵魂

    C语言的重要特性是灵活性,而灵活性的体现方式之一就是C语言指针。

1.2 相逢在C语言

1.2.1 初识指针——指针变量的定义

    指针是C语言的一种数据类型。指针类型的变量中存储的是地址。在计算机或单片机中,所有对数据的操作,都是通过其地址进行的,指针让程序效率更高,代码更少。

1.2.2 学以致用——指针变量的引用

    使用指针变量前必须对指针变量赋值,让其指向指定的内存单元。

    俗称的指针,是指地址,而不是指针变量。指针是个常量,指针变量是个变量,二者是不同的概念。

1.3 走进指针的日子

1.3.1 方圆世界——指针运算符

1、地址运算符&

2、取值运算符*

1.3.2 玩转指针——指针操作

1、赋值
    指针的赋值操作,其实就是指针的初始化,指针变量的初始化要用到地址运算符&。

2、取值
    取值操作是通过取值运算符*和指针变量的结合,间接访问指针指向的变量。

3、指针与整数加法
    举例表述吧。

int array[10];
array + 3 == array[3];


4、指针与整数减法
    类似于指针与整数加法。

5、指针与指针的减法
    指针与指针的减法常用于数组中。需要注意的是,两个参加运算的指针必须同时指向同一个数组,否则没有意义,甚至发生不可预计的结果。

    好吧,原书这里有个例子。本来很简单,结果跟我想的并不一样。检验之,发现有问题。拿出来分享一下。

    指针变量p_New, p_Old分别指向Num[0]和Num[3]。如果有下面语句:

int i;
i = p_Old - p_New;


    执行后,i的值为多少?

    我以为应该是3,但原书结果为2。
    然后我就实验了下,在win7 + vc2010的环境下,结果为3。
    应该是书错了吧?

    总结一下。由于之前《C程序设计语言》里已经简要介绍过指针了,因此对于重复的部分抄的比较简略。在最后指针与指针的减法这一问题上,原书出现了一个很不应该的错误。着实让人很扫兴。不过我还是很难相信原书会出现这么一个错误。感觉更像是我想错了,希望好心人能验证一下,支持我一下或者指出我的错误。
2013-5-8 21:11
0
雪    币: 83
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
56
顶楼主,话说我准备重新学习C语言,以前学的都忘了%>_<%
2013-5-8 21:40
0
雪    币: 238
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
57
我也有同感,现在才发现学而不精是多么悲催的事
2013-5-9 07:37
0
雪    币: 250
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
58
共勉多交流哈~~
2013-5-9 08:09
0
雪    币: 250
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
59
来吧来吧,大家一起来吧~~
2013-5-9 08:11
0
雪    币: 250
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
60
2.1 由内及外——数组在内存中的样子

2.1.1 物以类聚——数组

    数组是一种构造类型,用来存储一系列、同一类型的数据。

2.1.2 数组在内存中的样子

    数组是一种构造类型,与基本数据类型一样,数组也是先定义后使用。根据数组定义的大小,编译器自动划分出相应大小的内存空间给该数组使用。

    同一数组的元素在内存中是按顺序连续存放的。

2.2 自从有了你

2.2.1 数组的左膀——下标

2.2.2 数组的右臂——指针

    好吧,这个之前已经笔记过了。基本就是这个意思。

int array[10];
int *pa;
pa = &array[0];

*pa++ = array[1];
/*...*/
*(pa + 9) == array[9];


    虽然数组是构造类型,但数组元素却是一个普通类型,每一个数组元素都有自己的地址,所以数组指针跟普通变量的指针是一样的,其实质都是地址。

2.3 数组,不止一面

2.3.1 引蛇出洞——数组指针的定义

2.3.2 数组指针的引用

    这里所说的数组指针,是指指向数组的指针变量。

2.4 数组元素那点事

2.4.1 这是直观的世界——数组的下标表示法

2.4.2 数组的另一面——数组的指针表示法

2.4.3 异曲同工——数组的下标与指针

    这三小节我实在看不出和2.2讲的有什么太大区别。所以,略了吧。

2.5 指针集中营——指针数组

2.5.1 戏说指针数组

2.5.2 深度对话——指针数组的引用

    好吧,这里有个例子。我要特意拿出来嘲讽一下。

#include <stdio.h>

int main()
{
	char temp;
	char *week[] = {"Illagal day", "Monday", "Tuesday", "Wednesday",
		"Thersday", "Friday", "Saturday", "Sunday"};

	printf("please input number : ");
	scanf("%d", &temp);

	if(temp < 7)
	{
		switch(temp)
		{
		case 0 :
			printf("Illagal day\n");
			break;
		case 1 :
			printf("Monday\n");
			break;
		case 2 :
			printf("Tuesday\n");
			break;
		case 3 :
			printf("Wednesday\n");
			break;
		case 4 :
			printf("Thersday\n");
			break;
		case 5 :
			printf("Friday\n");
			break;
		case 6 :
			printf("Saturday\n");
			break;
		case 7 :
			printf("Sunday\n");
			break;
		default : 
			break;
		}
	}

	return 0;
}


    相信我,我没有抄错一个字。我真不知道这个week[]定义出来有什么用。。。你说最后要是printf("%s\n", week[temp])输出我也就认了,无非就是个无聊的例子。

    看到这,我撕书的心都有了。话说我对书一向很爱惜,除了初中时一位女女撕过我的书外,我的书都活的很完整。

2.6 聚焦字符串的指针

2.6.1 字符串指针的定义

2.6.2 字符串指针的引用

    这节也略了吧。之前的笔记已经做过了。

总结:
    1、经典之所以是经典,那是因为其他书实在太烂。哪怕忽略这些低级的错误,讲解、例子都是超这些书好几条街的。

    2、可能由于这两章的内容都是刚学习过的,再看到的时候挑刺的成分多一些,所以公平起见,再给他一次机会。但如果下一章依然没有什么新意,依然低级错误连连的话,我就直接把这本书略了。

    预告一下,下一章——指针在函数中的应用。标题看起来很吸引人的说,看看能不能讲出花来。
2013-5-10 23:04
0
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
61
谢谢lz了,看完后我知道要重新学习指针和结构了。
2013-5-10 23:54
0
雪    币: 11123
活跃值: (17661)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
62
看来10楼的是高手啊,
2013-5-11 09:09
0
雪    币: 250
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
63
能对你有帮助,我也很高兴。
2013-5-11 09:48
0
雪    币: 437
活跃值: (78)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
64
感谢楼主分享..支持一个....
2013-5-11 09:53
0
雪    币: 51
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
65
很好!加油!学习需要坚持
2013-5-15 13:27
0
雪    币: 250
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
66
3.1 完美的传递

    函数是为完成某项特定功能而编写的程序块。而函数调用时所传递的数据,就是所谓的函数参数。C语言中,函数参数可以分为两类。一类传递的是变量的数值,称之为普通参数;一类传递的是变量的地址,称之为指针参数。需要强调的是,C语言中,函数传递总是单向的值传递,这也是指针参数应用而生的重要原因,因为指针参数的传递很好地解决了单向值传递的问题。

3.1.1 指针新用途——指针用做函数参数
3.1.2 说来说去——普通参数与指针参数

    这两节内容之前的笔记已经抄过,不重复了。

3.2 函数也有指针

3.2.1 何谓函数的指针

    编译程序时,编译器会给每个函数自动分配一块内存空间,用以存储该函数。这个起始地址就是函数的入口地址,即函数的指针。这里需要注意的是,一个函数只有一个函数指针,并不能通过函数指针的移动来访问函数体中的语句。

3.2.2 指点江山——指向函数的指针变量

    定义形式:数据类型 (*变量名)();
    其中,第一个括号不可省略。因为“()”的优先级比“*”的优先级高。举个例子来说明一下。

#include <stdio.h>

void OutPut()
{
	printf("This is a string.\n");
}

int main()
{
	void (*pOutPut)() = OutPut;

	(*pOutPut)();

	getchar();

	return 0;
}


3.2.3 翻来覆去——函数指针和指针函数

    指针学习到这一步,已经算是比较深入了。遇到比较绕口的名字,我们不要害怕。仔细梳理一下就会发现,比较绕口的内容都是多个属性合并在一起,综合起来后形成比较繁琐的知识点。

    函数指针上一节已经讲过了。这里的指针函数是指返回值是指针的函数。

    定义形式:数据类型 *变量名();

3.3 我要的是指针,不是寂寞

3.3.1 函数的返回值
3.3.2 这个函数很奇怪——返回指针类型的函数
3.3.3 main函数的返回值

    这一节真的没什么好抄的。

    总结一下,依稀仿佛好像又是一章酱油。唉,都不知道该总结些什么。说说对此书的看法吧,食之无味,弃之可惜。如果作者能够把花在编章节标题上的功夫用在写书上,或许会更好吧,直奔下一章。
2013-5-15 22:17
0
雪    币: 250
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
67
4.1 渐行渐进——多维数组

4.1.1 多维数组的定义

    笔记过,不赘述。

4.1.2 指针的指针

    定义形式:数据类型 ** 变量名;

    直接上个例子来说明吧。

#include <stdio.h>

int main()
{
	char *str[] = {"Hello", "World", "!"};
	char **pstr;
	int i;

	pstr = str;

	for (i = 0; i < 3; i++)
		printf("%s ", *(pstr + i));

	getchar();
	return 0;
}


4.1.3 当指针遇上多维数组

    简单的说,多维数组是一行接一行顺序排列的。因此指针就一直往上加加加就可以了。

4.2 不能不说的秘密——main函数的秘密

4.2.1 main函数也是函数
4.2.2 野百合也有春天——main函数的参数

    好吧,这本书算是跟main函数杠上了,又重复了遍。但可惜,还是没什么新鲜的内容。

    本章依然没什么可总结。
    那就总结总结我吧。最近在折腾GitHub上的个人小博客站,所以影响了这边的进度。发现自己写html弄博客挺有意思,不过html只会个皮毛而已。还需要继续努力。
    另外,对于这本书,从我的角度讲,我真的想放弃了。直接开启《算法导论》的进度。但想着总该善始善终才是,于是看了下目录,还有5章。加快进度,争取6月的时候进入下一阶段。
2013-5-15 22:22
0
雪    币: 250
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
68
感谢支持~~字数字数
2013-5-15 22:25
0
雪    币: 250
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
69
感谢支持~~字数字数
2013-5-15 22:26
0
雪    币: 40
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
70
我还在学习C++
当下正在看 <VC++ 2008>  红皮书。
因为我没有计算机语言的基础 所以书中有太多的概念 需要反复的琢磨 才能理解
这本书我买了 4年了  4年来这本书整体我算是略了一遍
但是由于 书中的很多概念似懂非懂 所以往后看直到看完 还是头脑混浊
不过还好 我一直都没想过放弃
四年间 偶尔在书店看到很多新的语言类书籍 比如 JAVA 比如 C# 有心动过...

看了楼主一楼的感悟 我想我现在的选择是对的 ---- 我现在还在坚持从头开始完整的看和动手练习试例。
目前已经复习到第四章节 感觉上比之前好过许多不止。

我不会放弃 直到认认真真的把这本书吃透。因为这是一本C++基础的书(三块砖头那么厚~)
所以我想 即便是我吃透之后 也不会有独立开发 程序的能力吧。

我那天看到乔布斯的一个采访视频 他在里面有句话我印象很深“学好一门计算机语言 可以给人来一种逻辑思维 ”大概是这样的一句话 嗯嗯 这句话还是坚定的我了信心啊。

计算机技术 很深 深不见低 我希望我能把握好方向 一步一步的往前走 不悲不抗
学习 不为其它目的 仅仅是因为爱好。
2013-5-30 10:38
0
雪    币: 90
活跃值: (91)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
71
抄书精华第一帖...................!!!
2013-5-30 11:06
0
雪    币: 253
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
72
楼主的学习方法,很好,借鉴一下。。
2013-5-31 08:57
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
73
半个月没更新了
坑了没?
2013-5-31 09:02
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
74
一个月了  才刚刚到main函数
精华?
2013-6-13 13:23
0
雪    币: 250
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
75
人总要工作,总要处理家事。

公司赶进度突突了多半个月,家中领导闹别扭又折腾了俩星期。身心俱疲啊。。。

今天起恢复更新。

难得您费心惦记,感谢。
2013-6-14 08:50
0
游客
登录 | 注册 方可回帖
返回
//