彻底搞定C指针 ---姚云飞著
- 格式:pdf
- 大小:328.79 KB
- 文档页数:46
c语言参考书
C语言是一门重要的编程语言,有很多优秀的参考书籍可以帮助学习者更好地掌握它。
以下是一些推荐的C语言参考书籍:
1. 《C Primer Plus》(第6版):这是一本非常经典的C语言入门教材,详细介绍了C语言的基础知识和编程技巧,并通过大量实例让读者更好地掌握如何应用这些知识进行程序设计。
此外,书中还涵盖了C99标准和C11标准的新特性,让读者了解最新的C语言开发技术。
2. 《The C Programming Language》(第2版):这本书是由C语言的创始人Dennis M. Ritchie和著名计算机科学家Brian W. Kernighan合作编写的,是一本经典的C语言教材。
书中详细介绍了C语言的基础知识和编程技巧,并通过大量实例让读者更好地掌握如何应用这些知识进行程序设计。
此外,书中还介绍了C语言标准库函数和系统调用等内容。
3. 《手把手教你学C语言》:这本书主要针对学习C语言的初学者,即使完全没有编程基础,也能够通过阅读本书快速掌握C语言的核心知识。
4. 《C和指针》:这本书通过讲述指针来让初学者更好地理解C语言。
5. 《C专家编程》:这本书的特色诙谐幽默,把C上升到一个更高的层次,更容易让初学者接纳。
6. 《C标准库》:这本书是一本圣经,全面阐释了函数的应用,是程序员必备的参考书籍。
7. 《计算机算法设计与分析(第3版)》:这本书是学习数据结构和算法的进阶教材,为后面进阶做了铺垫。
此外,《C陷阱与缺陷》、《计算机算法设计与分析(第3版)》也是不错的参考书。
总之,学习C语言需要多读多实践,只有不断地练习才能更好地掌握它。
C语言从入门到精通所需的7本书作者:王霸羔子1.C primer plusC primer plus作为一本被人推崇备至的c入门经典,C primer plus绝非浪得虚名。
应该算得上C教材里最好的入门书了。
在知识广度上,很少有书能匹及。
它能为你系统学习c提供一个良好的平台。
作者对c 的见解精辟。
在娓娓叙述的同时,作者辅以大量程序以分析。
它让我对C有了更加系统的全新认识。
决非国人所写的那些公理化的教条说教,我觉得作者把自己的心血全部吐露。
书很厚,近700页,却不没有让我觉得任何的烦琐。
甚至是兴趣盎然。
我把上面所有的课后题目都做了。
最为重要的是,看完这本书后,我再也不觉得c很高深枯燥无味了。
如果你问我,你最大收获是什么。
我会告诉你,兴趣!2.The C programming language拿到这本薄薄的书,很多人开始怀疑,C语言是这么几百页能讲清楚的么。
看完这本书,我想答案已经很明了,却真的让人感到震憾。
什么是好书?无法删减的书才是真正的好书。
K&R的书一如C语言的设计理念:简单而高效里面的习题建议都认真做一遍,而且是在linux下用vi来做,用makefile来编译,用shell脚本来进行测试,本来第八章的题就是和linux 相关的计算机的大学生们不应只会在WINDOWS下用VC来编程,而都应该在linux环境下进行程序设计,因为linux本身就是为开发者准备的操作系统。
3. C和指针这本书最大的特点就是和指针结合在一起进行讲解,通过一些经典的C例题对所学的知识进行巩固,对指针的基础和深入的探讨,有助于初学者更好的理解C语言,还有明白C 的存储机制。
我之前买了《C语言详解》和《C Primer Plus》结合这本书一起学习,可以说是完美的,希望每个热爱C语言的人能够拥有这本书。
我在这里推荐给所有想学好C语言的朋友!4.C专家编程感觉这本书的特色:1.全书如一部优美的故事,但听作者娓娓道来.2.语言风趣活泼,除了c语言,还教会了我们很多做人做事的道理.3.作为Sun公司的工程师,内功极深,不迷信任何权威,还经常调侃下 ANSI C委员会,ISO组织和GNU的作品(如GCC).4.把c讲解到了一个很高的层次,深入剖析了其他书上没有提到过的好东西.5. C缺陷与陷阱很好的书,不是初级读物,但也不过于艰深,而且厚度刚刚好,让人在热情高涨阶段读完,不致于到了一半时间就气馁。
面向对象c语言参考书籍C语言是一种广泛应用于软件开发领域的编程语言,它的灵活性和高性能使得它成为了许多计算机科学专业学生的首选编程语言。
在学习和应用C语言时,选择一本合适的参考书籍是非常重要的,因为它能够为你提供全面的基础知识和实践经验。
本文将推荐几本面向对象C语言参考书籍,帮助你快速入门并提高编程技能。
1. 《C Primer Plus》(Stephen Prata)《C Primer Plus》是一本经典的C语言入门参考书籍,适合零基础或初学者使用。
该书从基础概念开始讲解,详细介绍了C语言的语法、数据类型、指针、数组、函数等知识点,并通过大量的示例代码和练习题帮助读者巩固所学内容。
此外,该书还包含了面向对象编程的介绍,帮助读者了解C语言在对象思维方面的应用。
2. 《C Programming Language》(Brian W. Kernighan, Dennis M. Ritchie)《C Programming Language》是由C语言的创始人Dennis M. Ritchie 和Brian W. Kernighan合著的经典之作。
这本书详细介绍了C语言的语法和基本概念,语言简洁明了,适合有一定编程基础的读者学习。
尽管该书没有专门涵盖面向对象编程的内容,但它为读者提供了良好的C语言基础,为后续学习面向对象的扩展奠定了坚实的基础。
3. 《C: A Reference Manual》(Samuel P. Harbison, Guy L. Steele Jr.)《C: A Reference Manual》是一本权威的C语言手册,适合有一定编程经验的读者。
该书详细介绍了C语言的各种特性和用法,并提供了大量的示例代码。
此外,该书还介绍了C语言的扩展功能和一些高级编程技巧,对于想要深入了解C语言的读者来说是一本不可或缺的参考书籍。
4. 《C How to Program》(Paul Deitel, Harvey Deitel)《C How to Program》是一本广受好评的C语言教材,适合初学者和中级学习者。
如果您需要学习C语言的高级技巧,这里推荐一份关于C语言高级技巧的PDF文档:
1. 指针和内存管理:深入理解指针的概念,掌握内存管理的技巧,包括内存分配、释放和动态内存管理等。
2. 函数指针和回调函数:了解函数指针的概念,掌握如何使用函数指针作为参数传递给其他函数,以及如何实现回调函数。
3. 文件I/O操作:掌握C语言中的文件操作技巧,包括文件的打开、读取、写入和关闭等操作。
4. 动态链接库和共享库:了解动态链接库和共享库的概念,掌握如何创建和使用动态链接库和共享库。
5. 进程间通信:了解进程间通信的概念,掌握如何使用管道、消息队列、信号量等机制实现进程间通信。
6. 多线程编程:了解多线程编程的概念,掌握如何使用线程库实现多线程程序,包括线程的创建、同步、互斥等操作。
7. 网络编程:了解网络编程的概念,掌握如何使用套接字编程接口实现网络通信,包括TCP和UDP协议等。
8. 数据结构和算法:深入学习常见的数据结构和算法,包括链表、树、图、排序、搜索等,掌握它们的实现和应用。
9. 编译器和调试技巧:了解编译器和调试器的使用技巧,掌握如何编译和调试C语言程序。
10. 安全编程:了解常见的安全漏洞和攻击手段,掌握如何编写
安全的C语言程序,包括缓冲区溢出、注入攻击等防御措施。
这份PDF文档包含了C语言的高级技巧和常用知识,可以帮助您深入理解C语言的底层原理和应用,提高您的编程技能和解决问题的能力。
彻底搞定C指针(完全版·修订增补版)著=姚云飞修订=丁正宇前言姚云飞先生的大作《彻底搞定C指针》是互联网上中文C/C++界内为数不多的专门阐述C指针问题的优秀文献资源之一。
正如书名所示,对于那些学习了C基础知识却始终对C指针不得要领的读者,或者那些已经长期被C指针困扰的读者,作者致力于彻底解决他们在这方面的难题。
为了达到这个目的,作者运用了许多生动与亲切的例子,深入浅出地讲透了C指针的原理与机制,并辅以编程实践中最常用的惯例和技巧作为示范。
《彻底搞定C指针》是互联网上下载次数最多的针对C指针问题的中文资源之一。
现在,经由修订者的重新修订、编辑与排版,本书的《完全版·修订增补版》全新登场。
新版本中的技术用语更加清楚严谨,行文的结构层次更加分明,例子中的程序代码均通过编译以测试其精准性。
修订者希望这份新的成果能够令各位读者在C编程方面获得更多的益处,同时也期待着读者们宝贵的反馈信息。
再次向姚云飞先生致敬!目录前言 (1)目录 (2)修订说明 (3)A类:规范化 (3)B类:更正 (3)C类:明晰化 (4)D类:编译器 (4)第壹篇变量的内存实质 (5)1.先来理解C语言中变量的实质 (5)2.赋值给变量 (6)3.变量在哪里?(即我想知道变量的地址) (7)第贰篇指针是什么? (8)1.指针是什么东西 (8)第叁篇指针与数组名 (11)1. 通过数组名访问数组元素 (11)2.通过指针访问数组元素 (11)3.数组名与指针变量的区别 (12)4.声明指针常量 (13)第肆篇const int *pi与int *const pi的区别 (14)1. 从const int i 说起 (14)2.const int *pi的语义 (15)3. 再看int *const pi (16)4.补充三种情况 (18)第伍篇函数参数的传递 (20)1.三道考题 (20)2. 函数参数传递方式之一:值传递 (23)3. 函数参数传递方式之二:地址传递 (26)4. 函数参数传递方式之三:引用传递 (27)第陆篇指向另一指针的指针 (30)1. 回顾指针概念 (30)2.指针的地址与指向另一指针地址的指针 (31)3. 一个应用实例 (32)第柒篇函数名与函数指针 (37)1. 通常的函数调用 (37)2.函数指针变量的声明 (38)3.通过函数指针变量调用函数 (38)4.调用函数的其它书写格式 (39)5.定义某一函数的指针类型 (42)6. 函数指针作为某个函数的参数 (44)修订说明A类:规范化A1. C程序的代码段,以及行文中的代码的字体,均统一调整为Courier New,例如:- 类型说明符“int”、变量名“a”、地址表达式“&a”、函数名“Exchg1”等等均作调整。
比较好的c语言书籍在学习C语言的过程中,选择一本好的教材是至关重要的。
一本好的C语言书籍应该能够帮助读者快速入门,并且能够详细地介绍C 语言的各个方面。
下面,我将为大家推荐几本比较好的C语言书籍。
1.《C Primer Plus》这本书是由Stephen Prata撰写的,是一本非常经典的C语言教材。
它适合初学者使用,内容全面、深入浅出,有助于读者快速掌握C 语言的基础知识和编程技巧。
此外,书中还包含了大量的实例和练习题,可以帮助读者巩固所学内容。
2.《C Programming Language》这本书是由Brian W. Kernighan和Dennis M. Ritchie合著的,被誉为C语言的圣经。
它是C语言的权威指南,对于想要深入了解C 语言的读者来说是必读的。
书中详细介绍了C语言的各个方面,包括语法、数据类型、控制结构、指针等内容,对于提升C语言编程能力非常有帮助。
3.《C Programming Absolute Beginner's Guide》这本书由Greg Perry和Dean Miller合著,适合零基础的初学者使用。
它以简明易懂的方式介绍了C语言的基础知识和编程技巧,没有过多的数学公式或计算公式,非常适合初学者入门。
此外,书中还包含了许多实例和练习题,帮助读者巩固所学内容。
4.《C Programming for the Absolute Beginner》这本书由Michael Vine撰写,也是一本面向初学者的C语言教材。
它以简单易懂的语言介绍了C语言的基础知识和编程技巧,并包含了大量的实例和练习题,帮助读者通过实践来学习。
此外,书中还提供了一些小项目,让读者能够将所学知识应用到实际项目中。
以上是我为大家推荐的几本比较好的C语言书籍。
无论你是初学者还是有一定基础的读者,这些书籍都可以帮助你快速掌握C语言的编程技巧。
希望大家能够选择适合自己的教材,努力学习,提升编程能力。
面向对象c语言参考书籍
在学习C语言的过程中,选择一本好的面向对象的参考书籍是至关重要的。
以下是几本广受推荐的面向对象C语言参考书籍,供您参考:
1. 《C++ Primer》(第五版)- Stanley B. Lippman, Josée Lajoie, and Barbara E. Moo
这本经典参考书籍向读者深入浅出地介绍了面向对象编程和C++语言。
它包含了大量的示例和练习,适合初学者和有经验的开发者使用。
2. 《Effective C++》(第三版)- Scott Meyers
本书是一本经典的C++编程指南,专注于教授如何写出高效、可维护和可扩展的C++代码。
它涵盖了大量的面向对象C++编程技巧和最佳实践,对于想要深入理解C++语言的读者来说是一本必读书籍。
3. 《Head First C++》- Eric Freeman and Elisabeth Robson
这本书以有趣的方式引导读者学习C++语言。
它通过图文并茂的旁白、练习和实践项目,帮助读者理解和应用面向对象编程的概念。
适合初学者入门。
4. 《Thinking in C++》(第二版)- Bruce Eckel
这本书涵盖了C++的核心概念和面向对象编程的基本原则。
它以易于理解的方式解释C++的复杂性,并提供了丰富的示例和练习。
无论您是初学者还是有经验的开发者,这本书都能帮助您深入理解C++语言。
请注意,这些书籍并非完整的面向对象C语言参考书籍,但它们都提供了深入学习C++和面向对象编程的良好基础。
根据您的学习和需求,选择适合自己的一本参考书籍将有助于您更好地理解和应用面向对象的编程概念。
C语言技术的高级使用方法C语言作为一门广泛应用于软件开发和系统编程的编程语言,其高级使用方法在提高代码效率和性能方面起着重要作用。
本文将探讨几种C语言技术的高级使用方法,包括指针操作、内存管理以及多线程编程。
一、指针操作指针是C语言中一种强大的工具,可以直接访问和操作内存中的数据。
高级使用方法包括指针的指针、指针的算术运算以及函数指针等。
1. 指针的指针指针的指针是指指针变量的地址存储在另一个指针变量中。
通过使用指针的指针,可以实现多级间接访问,提高代码的灵活性和效率。
例如,可以使用指针的指针来实现动态数组的分配和释放。
通过在堆上分配一块内存,并将其地址存储在指针的指针中,可以实现动态数组的大小调整。
2. 指针的算术运算指针的算术运算允许对指针进行加减运算,以及比较大小。
这在处理数组和字符串时非常有用。
例如,可以使用指针的算术运算来实现字符串的逆序输出。
通过将指针指向字符串的末尾,然后逐步向前移动指针,可以实现字符串的逆序输出。
3. 函数指针函数指针是指向函数的指针变量。
通过使用函数指针,可以实现回调函数和动态函数调用等高级功能。
例如,可以使用函数指针来实现回调函数,即将一个函数作为参数传递给另一个函数。
这在事件处理和异步编程中非常有用。
二、内存管理C语言中的内存管理是一项关键任务,直接影响程序的性能和稳定性。
高级使用方法包括动态内存分配、内存池和内存映射文件等。
1. 动态内存分配动态内存分配允许在程序运行时分配和释放内存。
通过使用动态内存分配函数(如malloc和free),可以根据需要动态调整内存的大小。
例如,可以使用动态内存分配来实现链表数据结构。
通过在每个节点中使用指针来指向下一个节点,可以实现动态增删节点的功能。
2. 内存池内存池是一种预先分配一定数量内存块的技术。
通过使用内存池,可以减少动态内存分配和释放的次数,提高程序的效率。
例如,可以使用内存池来管理大量的小对象。
通过将内存分为固定大小的块,并将这些块链接在一起,可以实现高效的内存分配和释放。
c语言二级指针详解C语言中,指针是一种重要的数据类型,它可以指向另一个变量或者数据结构中的一个元素,并且可以进行不同种类的操作(如解引用、赋值、比较、运算等)。
在C语言中,指针本身也是一个变量,它具有一个内存地址,并且其值就是指向的地址。
而指针变量可以通过指定自己的类型来控制指向的变量或者数据结构元素的类型。
在C语言中,指针本身也可以被指针所指向,这样的指针就被称为“二级指针”或者“指向指针的指针”。
二级指针在一些情况下比普通指针更加灵活,比如当我们需要在函数内部进行指针变量的修改或者返回值时,就可以使用二级指针。
1、指向指针的指针需要使用两个星号(**)来声明,例如:int **p;2、在函数中传递指向指针的指针时,需要将变量的地址传递给函数,而函数需要使用指向指针的指针来访问实际的指针变量。
3、在使用二级指针时,我们需要防止指针变量指向非法内存地址,否则会导致程序出现意想不到的错误。
二级指针是C语言中非常重要的概念,尤其在函数调用和指针变量的修改或返回值时,更是非常有用。
不过,我们在使用二级指针时需要额外注意指向内存地址的合法性,否则会导致程序出现异常。
二级指针是指指向指针对象的指针,即指针的指针,它可以通过间接的方式访问一个指针变量所指向的地址,这种间接的访问方式可以增加程序的灵活性,从而使程序更加易于理解和维护。
1、动态内存管理在C语言中,动态内存分配是通过调用malloc函数来实现的,而释放动态内存则需要使用free函数。
在使用malloc函数分配内存时,它会返回一个指针,指向分配的内存空间的首地址,我们可以将这个指针赋值给一个普通的指针变量,然后通过这个普通指针变量来访问分配的内存空间。
不过,当我们使用malloc来分配一个指针数组时,我们就需要使用二级指针来存储这个指针数组的首地址。
int **p = (int **)malloc(sizeof(int *) * 10);for (int i = 0; i < 10; ++i) {p[i] = (int *)malloc(sizeof(int) * 10);}以上代码中,我们使用了二级指针来存储指向指针数组的地址,然后使用循环语句来为每一个指针分配空间。
推荐10本C#编程的最佳书籍 C#和.NET⾮常受全球开发⼈员的追捧和热爱。
书籍是⼈类进步的阶梯。
想要学习C# ?这⾥有10本学习C#编程的最好书籍在等着你哦。
1.《C# 5.0 in a Nutshell》:权威的参考书 学习C#的最佳书籍之⼀。
如果你想要获取最新的信息以增长有关C#语⾔编程的知识,这是最好的选择之⼀。
该书深⼊浅出地探讨了有关C#语⾔的知识。
不过要想能够充分吸收消化,你需要掌握⼀些关于C语⾔的基本知识。
总之,这本书绝对能让你获益良多。
全书⾸先简单地介绍了⼀下C#语⾔开发的相关背景,之后马上跳转到数据类型的基本原理。
然后⽤⼀种系统化的⽅法讲述编程⽅⾯的信息内容。
你还可以练习上⾯写的代码⽰例,这些⽰例可以从互联⽹上免费下载⾄LINQPAD中。
C#-books-to-learn-programming 2.《Head First C#》 学习新的编程语⾔的最好⽅法是学习它的各种实例。
此书就提供了很多可供读者亲⾃动⼿的项⽬。
这些项⽬不但易记、易参与,还易扩展。
举⼀个例⼦,蜂窝管理系统的项⽬提供了关于在接⼝和继承⽅⾯的改善代码,可以避免你的重复性⼯作。
索引写得也⾮常好,由于其包含了相关概念,所以能有助于你轻轻松松找到所需内容。
C#-books-to-learn-programming23.《Pro C# 5.0 and the .NET4.5 Framework》 (.NET的专业之⾳) 这本书是⽬前市⾯上学习C#语⾔的最好资源之⼀,不但写作风格简单易懂,⽽且给出的例⼦完全没有错误。
但是,如果你并没有任何或只有有限的编程经验,那么这本书不适合你。
假设是这样的情况的话,那么你需要先阅读其他的书。
但是,如果你有着丰富经验的话,那么这将是你最好的资源。
作者善⽤抛砖引⽟的⽅法启动每⼀个话题,最后提供相应的速记语法。
正是⽤这样的⽅式,书中给出了有关此编程语⾔的通⽤性信息,并且有⼤量的例⼦贯穿全书。
彻底搞定C指针(完全版·修订增补版)著=姚云飞修订=丁正宇前言姚云飞先生的大作《彻底搞定C指针》是互联网上中文C/C++界内为数不多的专门阐述C指针问题的优秀文献资源之一。
正如书名所示,对于那些学习了C基础知识却始终对C指针不得要领的读者,或者那些已经长期被C指针困扰的读者,作者致力于彻底解决他们在这方面的难题。
为了达到这个目的,作者运用了许多生动与亲切的例子,深入浅出地讲透了C指针的原理与机制,并辅以编程实践中最常用的惯例和技巧作为示范。
《彻底搞定C指针》是互联网上下载次数最多的针对C指针问题的中文资源之一。
现在,经由修订者的重新修订、编辑与排版,本书的《完全版·修订增补版》全新登场。
新版本中的技术用语更加清楚严谨,行文的结构层次更加分明,例子中的程序代码均通过编译以测试其精准性。
修订者希望这份新的成果能够令各位读者在C编程方面获得更多的益处,同时也期待着读者们宝贵的反馈信息。
再次向姚云飞先生致敬!目录前言 (1)目录 (2)修订说明 (3)A类:规范化 (3)B类:更正 (3)C类:明晰化 (4)D类:编译器 (4)第壹篇变量的内存实质 (5)1.先来理解C语言中变量的实质 (5)2.赋值给变量 (6)3.变量在哪里?(即我想知道变量的地址) (7)第贰篇指针是什么? (8)1.指针是什么东西 (8)第叁篇指针与数组名 (11)1. 通过数组名访问数组元素 (11)2.通过指针访问数组元素 (11)3.数组名与指针变量的区别 (12)4.声明指针常量 (13)第肆篇const int *pi与int *const pi的区别 (14)1. 从const int i 说起 (14)2.const int *pi的语义 (15)3. 再看int *const pi (16)4.补充三种情况 (18)第伍篇函数参数的传递 (20)1.三道考题 (20)2. 函数参数传递方式之一:值传递 (23)3. 函数参数传递方式之二:地址传递 (26)4. 函数参数传递方式之三:引用传递 (27)第陆篇指向另一指针的指针 (30)1. 回顾指针概念 (30)2.指针的地址与指向另一指针地址的指针 (31)3. 一个应用实例 (32)第柒篇函数名与函数指针 (37)1. 通常的函数调用 (37)2.函数指针变量的声明 (38)3.通过函数指针变量调用函数 (38)4.调用函数的其它书写格式 (39)5.定义某一函数的指针类型 (42)6. 函数指针作为某个函数的参数 (44)修订说明A类:规范化A1. C程序的代码段,以及行文中的代码的字体,均统一调整为Courier New,例如:- 类型说明符“int”、变量名“a”、地址表达式“&a”、函数名“Exchg1”等等均作调整。
A2. 行为中的代码段,按一般行文处理缩进;代码段内部规整缩进。
A3. 规整C语句,例如:- 语句中形如“a=b+c(x,y)”的,将调整为形如“a = b + c(x, y)”的新样式,即在运算符、用来间隔参数的逗号等的旁边补足空白,令语句的可读性更强。
- 补全语句结尾的“;”。
A4. 规整行文语序,令其更加通顺。
A5. 规整术语写法,例如:- “C、C++”调整为“C/C++”。
B类:更正B1. 更正术语,例如:- “申明”调整为“声明”。
B2. 规整C技术用语,例如:- “一个声明一整型指针变量的语句”调整为“一条声明一个指向整型变量的指针的语句”。
B3. 规整C程序,例如:-补全定义函数时的类型说明符“void”。
-补全main()程序段中的“return(0);”。
B4. 规整行文,例如:- “真正有意义上的指针”调整为“具有真正‘指针’意义的变量”。
B5. 更正标点符号,例如:-将行文里面中文/英文标点符号(全角/半角)混用、前后抵牾的情况进行更正。
-将程序里面有编程代码意义的符号(如双引号“"”)中被错误地录入为中文标点符号(全角)的,调整为英文(半角)的。
B6. 更正一些外语行文。
C类:明晰化C1. 初次介绍(不一定是初次出现)专业术语时,用黑体字。
C2. 需要突出重点的地方,用粗体字。
C3. 重整程序,例如:- 原作中某处的例1中的函数被定义名为“Exchg1()”,例2中的函数被定义名为“Exchg2()”,那么,将例3中的函数名在定义中调整为“Exchg3()”,使它们的逻辑关系更为明晰,易于读者阅读和理解。
- 循环体中的“printf("%d", a[i]);”调整为“printf("%d\n",a[i])”。
C4. 规整行文分段,令其更合乎逻辑。
D类:编译器D1. 著者声明相关代码“都是在VC6.0上实验”,而修订者则是使用gcc 3.4.2编译器测试相关代码。
第壹篇变量的内存实质1.先来理解C语言中变量的实质要理解C指针,我认为一定要理解C中“变量”的存储实质,所以我就从“变量”这个东西开始讲起吧!先来理解理解内存空间吧!请看下图:内存地址→ 6 7 8 9 10 11 12 13 ------------------------------------------------------------------------------------------------------- ···| | | | | | | | ···------------------------------------------------------------------------------------------------------如上图所示,内存只不过是一个存放数据的空间,就好像我的看电影时的电影院中的座位一样。
电影院中的每个座位都要编号,而我们的内存要存放各种各样的数据,当然我们要知道我们的这些数据存放在什么位置吧!所以内存也要象座位一样进行编号了,这就是我们所说的内存编址。
座位可以是遵循“一个座位对应一个号码”的原则,从“第1号”开始编号。
而内存则是按一个字节接着一个字节的次序进行编址,如上图所示。
每个字节都有个编号,我们称之为内存地址。
好了,我说了这么多,现在你能理解内存空间这个概念吗?我们继续看看以下的C/C++语言变量声明:int i;char a;每次我们要使用某变量时都要事先这样声明它,它其实是内存中申请了一个名为i的整型变量宽度的空间(DOS下的16位编程中其宽度为2个字节),和一个名为a的字符型变量宽度的空间(占1个字节)。
我们又如何来理解变量是如何存在的呢。
当我们如下声明变量时:int i;char a;内存中的映象可能如下图:内存地址→ 6 7 8 9 10 11 12 13 -------------------------------------------------------------------------------------------------------···| | | | | | | | ···------------------------------------------------------------------------------------------------------变量名|→i←|→a ←|图中可看出,i在内存起始地址为6上申请了两个字节的空间(我这里假设了int的宽度为16位,不同系统中int的宽度可能是不一样的),并命名为i。
a在内存地址为8上申请了一字节的空间,并命名为a。
这样我们就有两个不同类型的变量了。
2.赋值给变量再看下面赋值:i = 30;a = ’t’;你当然知道个两个语句是将30存入i变量的内存空间中,将“t”字符存入a变量的内存空间中。
我们可以利用这样的形象来理解啦:内存地址→ 6 7 8 9 10 11 12 13 -------------------------------------------------------------------------------------------------------···| 30| 't'| | | | | ···-------------------------------------------------------------------------------------------------------|→i←|→ a ←|3.变量在哪里?(即我想知道变量的地址)好了,接下来我们来看看&i是什么意思?是取i变量所在的地址编号嘛!我们可以这样读它:返回i变量的地址编号。
你记住了吗?我要在屏幕上显示变量的地址值的话,可以写如下代码:printf("%x", &i);以上图的内存映象为例,屏幕上显示的不是i值30,而是显示i的内存地址编号6了。
当然,在你的实际操作中,i变量的地址值不会是这个数了。
这就是我所认为的作为初学者应该能够想象到的变量存储的实质了。
请这样理解吧!最后总结代码如下:main(){int i = 39;printf(“%d\n”, i); /*①*/printf(“%d\n”, &i); /*②*/return(0);}现在你可知道①、②两个printf分别在屏幕上输出的是i的什么东西啊?好啦!下面我们就开始真正进入指针的学习了。
第贰篇指针是什么?1.指针是什么东西指针,想说弄懂你不容易啊!我们许多初学指针的人都要这样感慨。
我常常在思索它,为什么呢?其实生活中处处都有指针,我们也处处在使用它。
有了它我们的生活才更加方便了。
没有指针,那生活才不方便。
不信?你看下面的例子。
这是一个生活中的例子:比如说你要我借给你一本书,我到了你宿舍,但是你人不在宿舍,于是我把书放在你的2层3号的书架上,并写了一张纸条放在你的桌上。
纸条上写着:你要的书在第2层3号的书架上。
当你回来时,看到这张纸条,你就知道了我借与你的书放在哪了。
你想想看,这张纸条的作用,纸条本身不是书,它上面也没有放着书。
那么你又如何知道书的位置呢?因为纸条上写着书的位置嘛!其实这张纸条就是一个指针了。
它上面的内容不是书本身,而是书的地址,你通过纸条这个指针找到了我借给你的这本书。
那么我们C/C++中的指针又是什么呢?请继续跟我来吧,下面看一条声明一个指向整型变量的指针的语句:int *pi;pi是一个指针,当然我们知道啦,但是这样说,你就以为pi一定是个多么特别的东西了。