C_语言学习笔记

合集下载

51单片机C语言入门教程

51单片机C语言入门教程

51单片机C语言学习杂记学习单片机实在不是件易事,一来要购买高价格的编程器,仿真器,二来要学习编程语言,还有众多种类的单片机选择真是件让人头痛的事。

在众多单片机中51架构的芯片风行很久,学习资料也相对很多,是初学的较好的选择之一。

51的编程语言常用的有二种,一种是汇编语言,一种是C语言。

汇编语言的机器代码生成效率很高但可读性却并不强,复杂一点的程序就更是难读懂,而C语言在大多数情况下其机器代码生成效率和汇编语言相当,但可读性和可移植性却远远超过汇编语言,而且C语言还可以嵌入汇编来解决高时效性的代码编写问题。

对于开发周期来说,中大型的软件编写用C语言的开发周期通常要小于汇编语言很多。

综合以上C语言的优点,我在学习时选择了C语言。

以后的教程也只是我在学习过程中的一些学习笔记和随笔,在这里加以整理和修改,希望和大家一起分享,一起交流,一起学习,一起进步。

*注:可以肯定的说这个教程只是为初学或入门者准备的,笔者本人也只是菜鸟一只,有望各位大侠高手指点错误提出建议。

明浩2003-3-30pnzwzw@第一课建立您的第一个C项目使用C语言肯定要使用到C编译器,以便把写好的C程序编译为机器码,这样单片机才能执行编写好的程序。

KEIL uVISION2是众多单片机应用开发软件中优秀的软件之一,它支持众多不同公司的MCS51架构的芯片,它集编辑,编译,仿真等于一体,同时还支持,PLM,汇编和C语言的程序设计,它的界面和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。

因此很多开发51应用的工程师或普通的单片机爱好者,都对它十分喜欢。

以上简单介绍了KEIL51软件,要使用KEIL51软件,必需先要安装它。

KEIL51是一个商业的软件,对于我们这些普通爱好者可以到KEIL中国代理周立功公司的网站上下载一份能编译2K的DEMO版软件,基本可以满足一般的个人学习和小型应用的开发。

cprimer第17章学习笔记

cprimer第17章学习笔记

《C++ Primer》第17章学习笔记第17章:用于大型程序的工具——异常处理,命名空间,多重继承与虚继承@学习摘录204:概念——大规模编程对程序设计语言的要求往往比小程序员团队更高。

——1. 更严格的正常运转时间以及更健壮的错误检测和错误处理。

——2. 能够用各种库(可能包含独立开发的库)构造程序。

——3. 能够处理更复杂的应用概念。

第一节:异常处理@学习摘录205:异常处理的作用——通过异常我们能够将问题的检测和问题的解决分离,这样程序的问题检测部分可以不必了解如何处理问题。

@学习摘录206:抛出类型的异常——异常是通过抛出(throw)对象而引发(raise)的。

被选中的处理代码是调用链中与该对象类型匹配且离抛出异常位置最近的那个。

——执行throw的时候,不会执行跟在throw后面的语句,而是将控制从throw转移到匹配的catch.@学习摘录207:被抛出的对象——被抛出的对象将会自动转换为一个指针,不存在数组或函数类型的异常。

——如果抛出一个数组,被抛出的对象转换为指向数组首元素的指针。

——如果抛出一个函数,函数被转换为指向该函数的指针。

@学习摘录208:异常对象——在处理异常的时候,抛出异常的块中的局部存储不存在了。

——因为在处理异常的时候会释放局部存储,所以被抛出的对象就不能再局部存储了,而是用throw表达式初始化一个称为异常对象的特殊对象。

——异常对象将传给对应的catch,并且在完全处理了异常之后撤销。

——当抛出一个表达式的时候,被抛出对象的解态编译时类型将决定异常对象的类型。

@学习摘录209:异常与指针——用抛出表达式抛出静态类型时,比较麻烦的一种情况是,在抛出中对指针解引用。

——抛出指针的时候,必须确定进入处理代码时指针所指向的对象存在。

——如果抛出指向局部对象的指针,而且处理代码在另一函数中,则执行处理代码时指针所指向的对象将不再存在。

——抛出指针通常是个坏主意:抛出指针要求在对应处理代码存在的任意地方存在指针所指向的对象。

(完整)C语言 谭浩强学习笔记

(完整)C语言 谭浩强学习笔记

C语言谭浩强版笔记第一章程序设计和C语言1、计算机能直接识别和接受的二进制代码称为机器指令,机器指令的集合就是该计算机的机器语言。

2、语言的发展历史:①机器语言②符号语言③高级语言3、高级语言的发展:①非结构化语言②结构化语言③面向对象的语言4、C语言的祖先是BCPL语言5、在字符串中的//和/*都不作为注释的开始。

而是作为字符串的一部分。

【但是在vc++6.0中//显示编译错误】6、不要以为在max函数中求出最大值z后就会自动地作为函数值返回调用处,必须用return语句指定将哪个值作为函数值。

也不要不加分析地在所有函数后面都写上return 07、一个程序由一个或多个源程序文件组成8、全局声明:即在函数之外进行的数据声明,在函数外面声明的变量称为全局变量。

例如把int a,b,sum;放到main函数的前面9、函数是C程序的主要组成部分,编写C程序的工作主要就是编写一个个函数10、一个C语言程序是由一个或多个函数组成的,其中必须有且只有一个main函数11、一个小程序只包含一个源程序文件,在一个源程序文件中包含若干个函数(其中一个为main函数),若程序规模太大,可以使一个程序包含若干个源程序文件,每个源程序文件又包含若干个函数【一个源程序文件就是一个程序模块,一个程序分成若干个程序模块】12、在进行编译时是以源程序文件为对象进行的【分别对各源程序文件进行编译得到相应的目标程序,然后再将这些目标程序连接成为一个统一的二进制可执行程序】13、C语言的这种特点使得容易实现程序的模块化14、一个函数名后面必须跟一对圆括号,括号内写函数的参数名及其类型。

如果函数没有参数,可以写void或空括号【如int main(void)或int main()】15、void dump(){}它是一个空函数,但是是合法的16、程序总是从mian函数开始执行的,不管位置在哪儿17、程序中对计算机的操作是由函数中的C语句完成的18、二进制目标程序在visual C++中的后缀为.obj19、可执行程序在visual C++中的后缀为.exe20、一个源程序经过编译后得到的目标程序要经过连接阶段与函数库进行连接才能生成可执行文件21、程序设计的任务:①问题分析②设计算法③编写程序④对源程序进行编辑、编译和连接⑤运行程序,分析结果⑥编写程序文档第二章算法1、对数据的描述:在程序中要指定用到哪些数据类型以及这些数据类型和数据的组织形式,这就是数据结构。

C语言学习入门笔记之数组

C语言学习入门笔记之数组

数组笔记在程序设计中,把具有相同类型的若干变量按有序的形式组织起来。

这些按序排列的同类数据元素的集合称为数组。

在C语言中,数组属于构造数据类型。

一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。

因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。

1.一维数组的定义和引用1.一维数组的定义方式在C语言中使用数组必须先进行定义。

一维数组的定义方式为:类型说明符数组名[常量表达式];其中:类型说明符是任一种基本数据类型或构造数据类型。

数组名是用户定义的数组标识符。

方括号中的常量表达式表示数据元素的个数,也称为数组的长度。

例如:int a[10]; 说明整型数组a,有10 个元素。

float b[10],c[20]; 说明实型数组b,有10个元素,实型数组c,有20个元素。

char ch[20]; 说明字符数组ch有20 个元素。

对于数组类型说明应注意以下几点:1)数组的类型实际上是指数组元素的取值类型。

对于同一个数组,其所有元素的数据类型都是相同的。

2)数组名的书写规则应遵循标识符命名规则。

3)数组名不能与其它变量名相同。

例如:main(){int a; float a[10];……}是错误的。

4)方括号中常量表达式表示数组元素的个数,如a[5]表示数组a 有5 个元素。

但是其下标从0 开始计算。

因此5 个元素分别为a[0],a[1],a[2],a[3],a[4]。

5)常量表达式中可以包括常量和符号常量,不能用变量来表示元素的个数,也就是说,C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。

例如:#define FD 5 main(){int a[3+2],b[7+FD];……}是合法的。

但是下述说明方式是错误的。

main(){int n=5; int a[n];……}6)允许在同一个类型说明中,说明多个数组和多个变量。

C Primer Plus(第五版)学习笔记

C Primer Plus(第五版)学习笔记

C Primer Plus(第五版)学习笔记第一章概览1.1 C语言的起源记住Dennis Ritchie和Ken Thomson。

是在设计UNIX操作系统的时候开发的。

1.2 使用C语言的理由C是一种融合了控制特性的现代语言,而我们已发现在计算机科学的理论和实践中,控制特性是很重要的。

其设计使得用户可以自然地采用自顶向下的规划、结构化的编程,以及模块化的设计。

这种做法使得编写出的程序更可靠、更易懂。

C是一种高效的语言。

C程序往往很紧凑且运行速度快。

C是一种可移植语言。

由于C与UNIX的紧密联系,UNIX系统通常都带有一个C编译器作为程序包的一部分。

Linux中同样也包括一个C 编译器。

C强大而又灵活(计算机世界中经常使用的两个词)。

C面向编程人员的需要。

它允许您访问硬件,并可以操纵内存中的特定位。

它具有丰富的运算符供选择,让您能够简洁地表达自己的意图。

多数C实现都有一个大型的库,其中包含有用的C函数。

这些函数能够处理编程人员通常会面对的许多需求。

C的简洁性与其丰富的运算符相结合,使其可能会编写出极难理解的代码。

没有谁强迫您编写含糊难懂的代码,但存在这样的可能性。

试问,除C之外还有哪种语言存在一年一度的“含糊代码”(ObfuscatedCode)竞赛呢?1.3 C语言的发展方向不管C++和Java这些较新的语言如何流行,C在软件产业仍然是一种重要的技能,在最想获得的技能中,它一般都列在前10名。

特别是在嵌入式系统的编程中,C已开始流行。

也就是说,它将用来为汽车、照相机、DVD播放器和其他现代化设备中逐渐普及的微处理器编程。

同样,C已开始进入长期以来一直属于FORTRAN的科学编程领域。

最后,由于它是一种适合用来开发操作系统的语言,C在Linux的开发中也扮演着重要的角色。

1.4 计算机工作的基本原理CPU的工作非常简单,至少在我们所做的这一简短描述中是这样的。

它从内存中获取一个指令并执行该指令,然后从内存中获取下一个指令并执行。

c 语言学习笔记01

c 语言学习笔记01

1. c 语言1.1.1.helloworld文件名:test_pointer.c文件内容:#include <stdio.h>#include <malloc.h>int main(){printf("hello world\n\n");return 0;}编译加运行:[root@localhost c_study]# gcc test_pointer.c ;./a.outhello world1.1.2.获取键盘输入文件名:getKeyboardInptStr.c文件内容:#include <stdio.h>#include <malloc.h> int main(){char *a= malloc(sizeof(char *));char *b= malloc(sizeof(char *));scanf("%s",a);scanf("%s",b);printf("%s \t%s\n",a,b);free(a);free(b);return 0;}编译:gcc getKeyboardInptStr.c -o hello.exe运行[root@localhost tcp_ip]# ./hello.exe abcdddabc ddd[root@localhost tcp_ip]#1.1.2.1.从键盘输入构造数组文件名keyboard_input.c文件内容:#include <stdio.h>#include <malloc.h>int main(){char * strs[4];char *a;int i;for(i=0;i<4;i++){a= malloc(sizeof(char *));scanf("%s",a);strs[i]=a;//printf("%s \t\n",a);//free(a);}printf("=====================================\n");for(i=0;i<4;i++){printf("%s \t\n",strs[i]);}return 0;}1.1.3.读取文件读取文件有两个操作:打开流(fopen)和关闭流(fclose)#include <stdio.h>#include <stdlib.h>#include <malloc.h>int main(int ac,char**av){int exit_status=EXIT_SUCCESS;FILE *input;while( *++av!=NULL){input=fopen(*av,"r");if(input==NULL){perror(*av);exit_status=EXIT_FAILURE;continue;}if(fclose(input)!=0){perror("fclose");exit(EXIT_FAILURE);}}return exit_status;}1.1.3.1.打开文件流1.1.3.1.1.ungetc 用法文件名:ungetc_test.c文件内容:#include<stdio.h>#include<ctype.h>int main(){int value;int ch;value=0;while((ch=getchar())!=EOF && isdigit(ch)){value=value*10;value+=ch-'0';}//ungetc(ch,stdin);printf("%d\n",value);ch=getchar();printf("last char is %c\n",ch);return value;}若注释掉红色部分:[root@localhost read_file]# gcc ungetc_test.c;echo 234abc|./a.out 234last char is b否则:[root@localhost read_file]# gcc ungetc_test.c;echo 234abc|./a.out 234last char is a1.1.3.2.关闭流1.1.3.3.读取文本文件文件名称:read_file03.c文件内容:#include <stdio.h>#include <stdlib.h>#include <malloc.h>int main(){int value;int ch;char *input_file="ab.txt";FILE *input;input=fopen(input_file,"r");while((ch=fgetc(input))!=EOF){printf("%c",ch);}return 0;}1.2.指针1.2.1.取地址和取值取地址:&取值:*1.2.1.1.取地址int age=23;int *age_adrr=&age;1.2.1.2.取值参阅取地址。

【C语言C++编程学习笔记】基础语法,第一个简单的实例编程入门教程!

【C语⾔C++编程学习笔记】基础语法,第⼀个简单的实例编程⼊门教程!C语⾔/C++编程学习:⼀个简单的实例如果你能知道该程序将会在显⽰器上显⽰⼀些内容,那说明你还是知道⼀些的!确实如此,但所要显⽰的确切内容不是显⽽易见的,所以请运⾏程序来观看结果。

⾸先,⽤你熟悉的编辑器建⽴⼀个上⾯这个样的程序,然后给这个程序取⼀个名字,并以 .c 作为结尾以满⾜所在系统对⽂件名格式的要求。

例如,你可以把它命名为 helloworld.c。

现在编译并运⾏该程序。

如果⼀切运⾏正常,其显⽰结果为:实例简单说明◆ #include ←包含另⼀个⽂件这是程序的第⼀⾏。

它的作⽤相当于你在⽂件中的这⾏所在的位置键⼊了⽂件 stdio.h 的完整内容。

实际上,它是⼀种剪切和粘贴操作,这样可以⽅便地在多个程序间共享公⽤的信息。

#include 语句是 C预处理指令的⼀个例⼦。

通常,C 编译器在编译前要对源代码做⼀些准备⼯作;这称为预处理。

stdio.h ⽂件作为所有 C编译包的⼀部分提供,它包含了有关输出输⼊函数的信息以供编译器使⽤。

这个名字代表标准输⼊输出头⽂件。

我们称之为头⽂件,C语⾔中通常都带有许多头⽂件。

◆ int main () ←函数名接下来的这⾏代码声明了⼀个 main函数。

⼀个 C语⾔程序总是从称为 main()的函数开始执⾏的。

你可以对你所⽤的其他函数任意命名,但是 main()必须是开始的函数,所以说,main()函数在程序中是唯⼀的。

那么圆括号的功能呢?它们表明 main()是⼀个函数。

以后你将了解到更多的函数。

但现在,请你记住这个函数是 C程序的基本模块。

int 指明了 main()函数的返回类型。

这意味着 main()函数返回值的类型是整数。

返回到哪⾥呢?返回给操作系统。

如果浏览⽼版本的 C代码,你将发现程序常常以:main()这种形式开始。

C90标准勉强允许这种形式,但是 C99标准不允许。

因此即使你当前的编译器允许,也不要这么做,请注意规范。

翁凯c语言笔记

翁凯c语言笔记
翁凯是一位热爱编程的学生,他在学习C语言的过程中积累了很多宝贵的经验和知识。

下面是他的一些C语言学习笔记,希望对大家有所帮助。

1. 基础语法:C语言是一种结构化的编程语言,具有丰富的数据类型和运算符。

翁凯通过学习基础语法,掌握了变量的声明和赋值、控制语句、循环语句等基本概念。

2. 函数与模块化编程:C语言通过函数的调用来实现模块化编程,提高了代码的可读性和可维护性。

翁凯学会了如何定义和调用函数,并且学习了递归函数的使用。

3. 数组与指针:在C语言中,数组和指针是非常重要的概念。

翁凯弄清楚了数组和指针之间的关系,并学会了如何使用它们进行内存管理和数据操作。

4. 结构体与文件操作:C语言中的结构体可以用来存储不同类型的数据,翁凯学会了如何定义和使用结构体,并且掌握了文件的读写操作,可以将结构体数据保存到文件中。

5. 动态内存分配:C语言提供了动态内存分配的功能,翁凯学会了
使用malloc()和free()函数来进行内存管理,避免了内存泄漏和内存溢出的问题。

6. 编程技巧与调试:除了学习语法和基本概念,翁凯还注重培养编程技巧和调试能力。

他学会了使用调试工具和技巧,解决程序中的bug,并且善于利用注释、缩进和命名规范来提高代码的可读性。

翁凯通过不断学习和实践,逐渐掌握了C语言的基本知识和技巧。

他深知编程需要不断练习和积累,因此他坚持每天都进行编程练习,并且参与了一些开源项目,与其他开发者交流经验。

翁凯相信,只有不断学习和实践,才能成为一名优秀的C语言程序员。

C学习笔记一C语言和汇编语言的区别

C学习笔记一C语言和汇编语言的区别C语言和汇编语言是计算机编程中常见的两种语言,它们在编写程序时有着不同的特点和用途。

本文将从语法、可读性、抽象程度以及机器依赖性等方面对C语言和汇编语言进行比较,以帮助读者更好地理解它们之间的区别。

1. 语法差异C语言是一种高级编程语言,它采用类似英语的结构化语法,具有丰富的语法特性,包括变量、数组、条件语句、循环语句和函数等。

C语言的语法相对简洁,能够快速实现一些功能。

而汇编语言是一种低级编程语言,使用各种助记符和符号来表示机器指令、寄存器和内存访问等,需要编写者有较强的硬件知识和技巧。

相比C语言,汇编语言更接近计算机底层,更加底层、精简和直接。

2. 可读性和可维护性C语言的语法结构和语义更加接近自然语言,代码具有较好的可读性和可维护性。

由于C语言的抽象程度较高,程序员可以更快速地理解代码,并进行修改和维护。

同时,C语言具有模块化的特点,程序可以按模块进行组织,便于团队协作开发。

相比之下,汇编语言的语法和符号较为晦涩,阅读和理解汇编代码需要具备较深的计算机体系结构和指令集的知识。

汇编语言编写的程序通常较为底层,代码行数相对较多,可读性和可维护性较差,需要更高的技术水平和耐心。

3. 抽象程度C语言是一种高级语言,提供了丰富的语法特性和抽象层次,为程序员提供了更方便和高效的编程方式。

C语言可以在不同的计算机平台上进行移植,并且可以通过调用库函数实现复杂的操作,具备良好的抽象能力。

汇编语言是一种低级语言,提供了直接操作硬件的能力。

汇编程序员可以直接访问寄存器、内存等底层资源,实现对计算机的精细控制。

汇编语言相对于C语言来说更接近机器语言,具有更高的执行效率和更大的灵活性。

4. 机器依赖性C语言是一种面向过程的编程语言,编写的程序相对独立于具体的硬件平台,具有较好的可移植性。

通过编译器的编译,C语言可以在不同的操作系统和计算机上运行。

汇编语言则直接操作底层的机器指令和寄存器,与具体的硬件平台密切相关,不同的计算机架构和操作系统可能需要不同的汇编代码。

C语言基础学习笔记

C语言基础学习笔记(第一版修改)丁炳亮1数据类型和表达式1.1计算机内数据存储方式理解与测试:什么是补码?我们得先知道模的概念。

模“模”是指一个计量系统的计数范围。

如时钟等。

计算机也可以看成一个计量机器,它也有一个计量范围,即都存在一个“模”。

例如:时钟的计量范围是0~11,模=12。

表示n位的计算机计量范围是0~2^(n)-1,模=2^(n)。

“模”实质上是计量器产生“溢出”的量,它的值在计量器上表示不出来,计量器上只能表示出模的余数。

任何有模的计量器,均可化减法为加法运算。

例如:假设当前时针指向10点,而准确时间是6点,调整时间可有以下两种拨法:一种是倒拨4小时,即:10-4=6;另一种是顺拨8小时:10+8=12+6=6在以12模的系统中,加8和减4效果是一样的,因此凡是减4运算,都可以用加8来代替。

对“模”而言,8和4互为补数。

实际上以12模的系统中,11和1,10和2,9和3,7和5,6和6都有这个特性。

共同的特点是两者相加等于模。

二进制中整数的补码求法是:正数的补码为原码,负数的补码是符号位不变其他位全部取反再整个数加1。

我们可以通过下面的代码看下负整数在计算机内部的表示。

void f(int n){unsigned int i;for(i=1,i<<=15;i;i>>=1){if(i&n)printf("1");elseprintf("0");}printf("\n");}main(){int a=-0xff;f(a);getch();}输出的结果是1111111100000001。

1.2变量与常量理解与测试:1)类型声明在计算机内部数据是以字节为单位存储的,但是我们需要的数据类型有很多种,每种数据类型所占字节和存储方式都不一样。

类型声明的作用就是告诉计算机以哪种“格式”去读写该数据数据。

类型说明符变量名1,变量名2......,变量名n;类型说明符有基本类型(字符型、整数型、单/双精度型)、高级类型(结构体型、共用体型、枚举类型)、指针型等,其中指针类型包括指向基本类型的指针类型、指向高级类型的指针型和指向函数的指针类型(指向函数指针声明格式在后面章节)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C#语言学习笔记《C#完全手册.pdf》1.面向对象 = 对象 + 类 + 继承 + 通信。

如果一个软件系统是使用这样四个概念来设计的,我们认为这个软件系统是面向对象的。

2.静态成员是属于类所有的,非静态成员则属于类的实例--对象。

3.在一个类的实例—对象的生命周期中,最先执行的代码就是类的构造函数。

构造函数是用来初始化对象的特殊类型的函数。

可以使用带参数的构造函数,向它传递参数来对类的不同实例进行不同的初始化。

4.非静态方法可以访问类中的任何成员,而静态方法只能访问类中的静态成员。

5.方法的重载:类中两个以上的方法(包括隐藏的继承而来的方法),取得名字相同,只要使用的参数类型或者参数个数不同,编译器便知道在何种情况下应该调用那个方法,这就叫方法的重载*也就是说,可以在一个类中定义两个名字相同的方法,只要参数或者返回值有一点不一样就可以。

调用的时候,编译器会根据情况自动调用正确的方法。

6.在C#中,所有数据要么属于某个类,要么属于某个类的实例,从份体现面向对象的思想。

7.域const 型表达式的值在编译时形成,而static readonly 表达式的值直到程序运行时才形成。

8.事件(event)就是类或对象用来“发出通知”的成员。

通过提供事件的句柄,客户能够把事件和可执行代码联系起来。

9.事件的预定是通过为事件加上左操作符“+=”来实现的。

10.如果每个事件的存储开销太大,我们就可以在类中包含事件访问声明,按私有成员的规则存放事件句柄列表。

11.多态性:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。

多态性通过派生类重载基类中的虚函数型方法来实现。

12.多态性:同一操作作用于不同的类的实例,不同的类将进行不同的解释,最后产生不同的执行结果。

C#支持两种类型的多态性:编译时的多态性:通过重载实现。

对于非虚成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。

运行时的多态性:通过虚成员实现。

13.派生类中重新定义此虚函数时,要求的是方法名称、返回值类型、参数表中的参数个数、类型、顺序都必须于基类中的虚函数完全一致。

在派生类中声明对虚方法的重载,要求在声明中加上override关键字,而且不能有new,static,virtual修饰符。

14.非虚的派生类要求通过重载为继承的虚方法提供自己的实现,而抽象方法则不包含具体的实现内容,所以方法声明的执行体中只有一个分号“;”。

15.密封方法必须对基类的虚方法进行重载,提供具体的实现方法。

所以,在方法的声明中,sealed修饰符总是和orerride修饰符同使用。

属性声明时如果有sealed修饰符,同时也必须要有orerride修饰符。

16.构造函数实例构造函数和静态构造函数。

前者在每个实例或对象创建时被调用,后者在类的第一个对象被创建之前被调用(而且只调用一次)。

17.析构函数尽量不用18.装配有两种类型:应用程序和库。

应用程序都有一个入口,通常扩展名为“.Exe”。

库则不包含入口,通常扩展名为“.dll”薄弱环节:1.事件和索引指示器2.属性访问器3.接口21天学通C#1.由于sizeof运算符直接操纵内存,因此应尽可能避免使用它。

2.Switch语句每一个分支中的语句,必须以break结束。

3.随机数int nbr = 0;System.Random rnd = new System.Randow();Nbr = (int) rnd.Next(1,11);4.类的说明格式class_name object_identifier = new class_name() ;关键字 new 用来预留内存。

5.类中包含:数据成员和函数成员。

(数据成员甚至可以是其他类)数据成员如果不加public限定符,将无法在类的外面访问。

访问静态数据成员时,必须使用类名,而不是对象名。

6.属性为访问类中的私有变量提供了手段。

重新声明一个public变量,通过它,利用属性存储器get和set中的程序语句赋值或取值,访问私有变量。

例:class point{int my_X;public int x{get{return my_X;}set{my_X = value;}}7.名称空间是一组被命名的类。

将类集中在一起,形成名称空间。

8.通过使用关键字using实现使用类和方法的简捷方式,无需总是指定全限定名称。

比如Sytem.Console.WriteLine 是全限定名称,假如使用了using System;就可以用Console.WriteLine来使用Console类中的例程了。

9.在C#中例程被称为方法或函数,两者没有区别。

10.类的方法要使用所属类的数据成员,可以用this.数据成员的方法引用。

11.给类的方法传递参数时,要按引用传递,需要在方法头中的数据类型前面加上关键字“ref”。

若要返回参数,需要将其属性设置为关键字out。

调用方法时,参数前也要加上“out”。

12.声明数组 decimal [] balances;然后还要实例化 balances = new decimal[]例如:声明一个二维数组,同时实例化,并赋初值char[,] letters = new char[2,3]{{'a','b','c'},{'x','y','z′}} 在二维数组中声明长度不同的数组char [][] myname = new char[3][]myname[0]=new char[]{'a','b','c'};myname[1]=new char[]{'t','k','i','b','c'};myname[2]=new char[]{'a','b','o','c'};引用数组要素时必须用两个方括号 , 如,myname[2][1]数组的长度被存储在一个名为Length的成员中。

myname[2]. Length可用foreach 遍历数组。

13.方法重载:指的是创建多个名称相同的方法。

其中每个方法都在某些方面具备唯一性,以便编译器能够区别它们。

每个方法都有其特征标(signature),方法的参数个数及类型决定哪个方法是合适的。

但,返回类型不能作为特征标。

其实就是c#将名称一样,参数不同的方法视为不同的方法,并自动匹配。

●构造函数也可以重载。

14.方法要接受未知数目的参数,可以使用关键字params,该关键字用于参数列表中,声明参数列表最后面的值。

params 关键字与数组一起使用。

例: public static long add(params int[] args)●Main方法也可以接受不同数目的参数,但不需要在Main方法中使用params关键字。

标准做法如下:public static [int |void] Main(string[] args)15.如果类变量是标准的、非静态变量,可以使用关键字this。

例如,要访问类的数据成员x,使用this.x。

避免与其他局部变量冲突。

16.给构造函数加上限定符private实际上可以禁止创建对象。

这个类就变成不能创建对象的类了。

17.创建名称空间可以使用关键字namespace后面给标识该名称空间的名称。

然后使用花括号将该名称空间包含的类型括起来。

例如:namespace Consts{}使用using关键字来使用名称空间以后,不必使用全限定名称了。

using还可以为名称空间提供别名。

如:using doit = System.Console;doit.WriteLine(″blah″);18.try 和catchtry 命令给代码块加上包装(用花括号),帮助发送(route)任何可能发生的异常。

catch让您捕获try 命令发送的异常。

例如:catch(System.Exception e){Console.WriteLine(″The following exception was caught:\n{0}″,e);}*可有多个catch语句,应该在前面捕获较具体的异常,后面捕获较通用的异常。

19.finally 语句不管try 语句是否执行成功,都会执行。

20.throw 关键字引发异常,并终止程序.可以用来作合法性检查.throw(exception);21.引发自己的异常前要先声明它.格式: class ExceptionName:Exception{}其中, ExceptionName以Exception结尾.用throw 引发:throw(new MyThreeException());//MyThreeException是自己声明的异常22.checked 将过大或过小的值赋给变量将引发异常;unchecked 将过大或过小的值赋给变量时,直接进行裁剪.*在编译器中最好设置, checked23.类的继承class derived_class:base_class例如: class Employee : Person{}24.派生类的构造函数后加上冒号和base关键字,就可以调用基类的构造函数.base()的括号中填入基类的构造函数的参数.当基类的构造函数执行完毕后,将执行派生类的构造函数中的语句。

●关键字base也可以用于直接调用基类的方法。

public new void displayFullName(){Console.Write(″Emlooyee:″);Base.displayFullName();//displayFullName()是基类的方法}//派生类中的新方法displayFullName先显示一行信息,然后调用基类的displayFullName方法。

这样就可以扩展基类的功能而不用重写所有代码。

●派生类中的方法与基类的一个成员方法同名,而且使用了关键字new。

那么该方法将覆盖基类中同名的方法。

25.虚方法能够调用实际被赋给的对象所属类中的方法,而不是基类的方法。

(以便实现多态性)在基类的方法声明中使用关键字virtual。

如果这种方法在派生类中被覆盖(overriddren),则在运行阶段,调用的将是变量实际所属类的方法,而不是其被声明的类的方法。

这意味着可以使用基类来指向多个派生类,而调用相应的方法。

×在派生类中同名的方法声明中使用关键字override。

26.假如将派生类的对象赋给基类对象变量,基类对象变量也只能访问基类的数据成员和方法。

相关文档
最新文档