能力值:
( LV4,RANK:50 )
|
-
-
51 楼
多交流哈~~
|
能力值:
( LV4,RANK:50 )
|
-
-
52 楼
谢~
字数字数
|
能力值:
( LV2,RANK:10 )
|
-
-
53 楼
东西 不错 楼主 辛苦了 谢谢楼主的分享!
|
能力值:
( LV4,RANK:50 )
|
-
-
54 楼
谢谢鼓励~~
|
能力值:
( 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程序设计语言》里已经简要介绍过指针了,因此对于重复的部分抄的比较简略。在最后指针与指针的减法这一问题上,原书出现了一个很不应该的错误。着实让人很扫兴。不过我还是很难相信原书会出现这么一个错误。感觉更像是我想错了,希望好心人能验证一下,支持我一下或者指出我的错误。
|
能力值:
( LV2,RANK:10 )
|
-
-
56 楼
顶楼主,话说我准备重新学习C语言,以前学的都忘了%>_<%
|
能力值:
( LV2,RANK:10 )
|
-
-
57 楼
我也有同感,现在才发现学而不精是多么悲催的事
|
能力值:
( LV4,RANK:50 )
|
-
-
58 楼
共勉多交流哈~~
|
能力值:
( LV4,RANK:50 )
|
-
-
59 楼
来吧来吧,大家一起来吧~~
|
能力值:
( 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、可能由于这两章的内容都是刚学习过的,再看到的时候挑刺的成分多一些,所以公平起见,再给他一次机会。但如果下一章依然没有什么新意,依然低级错误连连的话,我就直接把这本书略了。
预告一下,下一章——指针在函数中的应用。标题看起来很吸引人的说,看看能不能讲出花来。
|
能力值:
( LV2,RANK:10 )
|
-
-
61 楼
谢谢lz了,看完后我知道要重新学习指针和结构了。
|
能力值:
( LV2,RANK:10 )
|
-
-
62 楼
看来10楼的是高手啊,
|
能力值:
( LV4,RANK:50 )
|
-
-
63 楼
能对你有帮助,我也很高兴。
|
能力值:
( LV2,RANK:10 )
|
-
-
64 楼
感谢楼主分享..支持一个....
|
能力值:
( LV2,RANK:10 )
|
-
-
65 楼
很好!加油!学习需要坚持
|
能力值:
( 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函数的返回值
这一节真的没什么好抄的。
总结一下,依稀仿佛好像又是一章酱油。唉,都不知道该总结些什么。说说对此书的看法吧,食之无味,弃之可惜。如果作者能够把花在编章节标题上的功夫用在写书上,或许会更好吧,直奔下一章。
|
能力值:
( 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月的时候进入下一阶段。
|
能力值:
( LV4,RANK:50 )
|
-
-
68 楼
感谢支持~~字数字数
|
能力值:
( LV4,RANK:50 )
|
-
-
69 楼
感谢支持~~字数字数
|
能力值:
( LV2,RANK:10 )
|
-
-
70 楼
我还在学习C++
当下正在看 <VC++ 2008> 红皮书。
因为我没有计算机语言的基础 所以书中有太多的概念 需要反复的琢磨 才能理解
这本书我买了 4年了 4年来这本书整体我算是略了一遍
但是由于 书中的很多概念似懂非懂 所以往后看直到看完 还是头脑混浊
不过还好 我一直都没想过放弃
四年间 偶尔在书店看到很多新的语言类书籍 比如 JAVA 比如 C# 有心动过...
看了楼主一楼的感悟 我想我现在的选择是对的 ---- 我现在还在坚持从头开始完整的看和动手练习试例。
目前已经复习到第四章节 感觉上比之前好过许多不止。
我不会放弃 直到认认真真的把这本书吃透。因为这是一本C++基础的书(三块砖头那么厚~)
所以我想 即便是我吃透之后 也不会有独立开发 程序的能力吧。
我那天看到乔布斯的一个采访视频 他在里面有句话我印象很深“学好一门计算机语言 可以给人来一种逻辑思维 ”大概是这样的一句话 嗯嗯 这句话还是坚定的我了信心啊。
计算机技术 很深 深不见低 我希望我能把握好方向 一步一步的往前走 不悲不抗
学习 不为其它目的 仅仅是因为爱好。
|
能力值:
( LV2,RANK:10 )
|
-
-
71 楼
抄书精华第一帖...................!!!
|
能力值:
( LV2,RANK:10 )
|
-
-
72 楼
楼主的学习方法,很好,借鉴一下。。
|
能力值:
( LV2,RANK:10 )
|
-
-
73 楼
半个月没更新了
坑了没?
|
能力值:
( LV2,RANK:10 )
|
-
-
74 楼
一个月了 才刚刚到main函数
精华?
|
能力值:
( LV4,RANK:50 )
|
-
-
75 楼
人总要工作,总要处理家事。
公司赶进度突突了多半个月,家中领导闹别扭又折腾了俩星期。身心俱疲啊。。。
今天起恢复更新。
难得您费心惦记,感谢。
|
|
|