C语言全套课程笔记汇总_第1页
C语言全套课程笔记汇总_第2页
C语言全套课程笔记汇总_第3页
C语言全套课程笔记汇总_第4页
C语言全套课程笔记汇总_第5页
已阅读5页,还剩118页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言全套课程笔记 2 3 循环结构程序 函数 内部变量与外部变量 2维数组的定义和引用 字符数组与字符串 常用的字符串处理函数 指针变量作函数参数 指针的运算 指针变量和数组作函数参数 结构与链表 共用型和枚举型简介 (1)语言简洁、紧凑,使用方便、灵活。(2)运算符极其丰富。(3)数据结构丰富,具有结构化的控制语句,语法限制不太严格,程序设计自由度大。(4)生成的目标代码质量高,程序执行效率高。(5)可移植性好(较之汇编语言)。(6)可以直接操纵硬件。2.程序行的书写格式自由,既允许1行内写几条语句,也允许1条语句分写在几行上。(2)注释的位置,可以单占1行,也可以跟在语句的后面。(3)如果1行写不下,可另起1行继续写。(4)注释中允许使用汉字。在非中文操作系统下,看到的是一串乱码,但不影响程序运正整数不变,负整数最高位不变,其余位取反正整数不变,负整数在反码基础上最低位加1关键字:(1)数据类型关键字(12个):Char声明字符型变量或函数Double声明双精度变量或函数Enum声明枚举类型Float声明浮点型变量或函数声明短整型变量或函数声明有符号类型变量或函数声明结构体变量或函数声明联合数据类型Int声明整型变量或函数Long声明长整型变量或函数unsigned声明无符号类型变量或函数void声明函数无返回值或无参数,声明无类型指针(2)控制语句关键字(12个):Break跳出当前循环for一种循环语句Case开关语句分支goto无条件跳转语句Continue结束当前循环if条件语句Do循环语句的循环体switch用于开关语句Else条件语句否定分支(与if连用)while循环语句的循环条件(3)存储类型关键字(4个):Auto声明自动变量一般不使用registerExtern声明变量是在其他文件正声明static声明积存器变量声明静态变量(4)其它关键字(4个):Sizeof计算数据类型长度typedef用以给数据类型取别名说明变量在程序执行中可被隐1.常量的概念:在程序运行过程中,其值不能被改变的量称为常量。(2)符号常量,从字面无法看出它们的值。变量(1)变量名。每个变量都必须有一个名字——变量名,变量命名遵循标识符命名(2)变量值。在程序运行过程中,变量值存储在内存中。在程序中,通过变量名(1)有效字符:只能由字母、数字和下划线组成,且以字母或下划线开头。(2)有效长度:随系统而异,但至少前8个字符有效。如果超长,则超长部分被舍在C语言中,要求对所有用到的变量,必须先定义、后使用;且称在定义变量(1)变量定义的一般格式[存储类型]数据类型变量名[变量名2.];(2)变量初始化的一般格式[存储类型]数据类型变量名[=初值][变量名2[=初值2]…..;(1)基本整型(类型标识符为int)。(1)十进制。例如10、36。(2)八进制(以数字0开头)。例如012。(3)十六进制(以数字0+小写字母x开头)。例如0x36浮点型数据(实型):1.分类换页字符串中字符的个数称为字符串长度。长度为0的字符串(即一个字符都没有的字符串)称为空串,表示为“”(一对紧连的双引号)。(1)定界符不同:字符常量使用单引号,而字符串常量使用双引号;(2)长度不同:字符常量的长度固定为1,而字符串常量的长度,可以是0,也可以是某(3)存储要求不同:字符常量存储的是字符的ASCII码值,而字符串常量,除了要存储有(1)关于除法运算/C语言规定:两个整数相除,其商为整数,小数部分被舍弃。例如,5/2=2。(2)关于求余数运算%表达式:用运算符和括号将运算对象(常量、变量和函数等)连接起来的、符合C语言语结合性是C语言的独有概念。除单目运算符、腻值运算符和条件运算符是右结(2)如果在一个运算对象(或称操作数)两侧的运算符的优先级相同,则按C语言规定的结合方向(结合性)进行。例如,算术运算符的结合方向是"自左至右",即:在执行“a-b+c"时,变量b先与减号自增(++)、自减(--)运算自增运算使单个变量的值增1,自减运算使单个变量的值减1。(1)自增、自减运算,常用于循环语句中,使循环控制变量加(或减)1,以及指针变量中,使指针指向下(或上)一个地址。(3)在表达式中,连续使同一变量进行自增或自减运算时,很容易出错,所以最好避免这如果表达式值的类型,与被赋值变量的类型不一致,但都是数值型C语言规定的10种复合赋值运算符如下:+=,-=,*=,/=,%=;/*复合算术运算符(5个)*/&=,^=,I=,<<=,>>=;/*复合位运算符(5个)*/C语言提供6种关系运算符:在关系运算符中,前4个优先级<、<=、>、>=相同,后2个==、!=也相同,且前4个高于后2个。所谓关系表达式是指,用关系运算符将两个表达式a>b成立为1,不成立为0&&逻辑与(相当于“同时”)(2).逻辑运算符的运算优先级!(非)→&&(与)→I(或)逻辑表达式:所谓逻辑表达式是指,用逻辑运算符将1个或多个表达式连接起来,进行逻辑运算的式子。在C语言中,用逻辑表达式表示多个条件的组合。2.逻辑量的真假判定——0和非0或"假"时,却以0和非0为根据:如果为0,则判定为"逻辑假";如果为非0,3.说明(1)逻辑运算符两侧的操作数,除可以是0和非0的整数外,也可以是其它任何(2)在计算逻辑表达式时,只有在必须执行下一个表达式才能求解时,才求解该表达式(即并不是所有的表达式都被求解)。换句话说:1)对于逻辑与运算,如果第一个操作数被判定为“假”,系统1.一般格式:表达式1?表达式2:表达式3否则,运算结果等于"表达式3"的值。逗号运算(,)及其表达式:表达式1,表达式2,..…,表达式n(float)(5/2)/*将5整除2的结果(2)转换成实型(2.0)*/行"操作。(2)长度修正符1或hld、Ix、lo、lu;hdhxhohu(3)域宽及精度描述符m.n(4)0—-数字前空位补0(5)---左对齐输出输出项表*(参数)输出项表是可选的。如果要输出的数据不止1个,相邻2个之间用逗号分开。下面的必须强调:"格式字符串"中的格式指示符,必须与“输出项表”中、输出项的数据类型3.类型转换字符c—输出一个字符(只占一列宽度)(2)格式字符x、e、g可以用小写字母,也可以用大写字母。使用大写字母时,输1.格式字符3.域宽n假设给num1输入12,给num2输入36,2.“格式字符串”中出现的普通字符(包括转义字符形式的字符),务必原样输入。假设给num1输入12,给num2输入36,正确的输入操作为:12,36√假设给num1输入12,给num2输入36,其中ch可以是一个字符变量或常量,也可以是一个转义字(2)在程序中使用putchar()函数,务必牢记:在程序(或文件)的开头加上编译预处理命令(也称包含命令),即:#include"stdio.h"表示要使的数值为5,然后再把a的数值加上1为6,再放到变量a变量a中的6了。★考试口诀:++在前先加后用,++在后先用后加。假(0)假(0)在C语言中表示条件,一般用关系表达式或逻辑表达式,实现选择结构用if语句或(2)else子句(可选)是if语句的一部分,必须与if配对使用,不能单独使用。(3)当if和else下面的语句组,仅由一条语句构成时,也可不使用复合语句形式(即去掉花括号)。{语句1;}双边选定else子句时)真表达式假{语句组1;}{语句组2;(1优化形式的基本思想是:首先取一个数预置为max(最大值),然后再用max依次与其余的数逐个比较,如果发现有比max大的,就用它给max重新赋值,比较完所有的数后,max中的数就是最大值。这种方法,对从3个或3个以上的数中找最大值的处理,非常有效。假假表达式2真表达式3假真假假(1)与在它上面、距它最近、且尚未匹配的if配对。(1)if后面的"表达式",除常见的关系表达式或逻辑表达式外,也允许是其它类型的(1)当switch后面“表达式”的值,与某个case后面的"常量表达式"的值相同时,就执行该case后面的语句(组);当执行到break语句时,跳出switch语句,转向执行switch语(2)如果没有任何一个case后面的"常量表达式"的值,与“表达式”的值匹配,则执行80≤score<90,等级为B;70≤score<80,等级为C;60≤score<70,等级为D;score<60,等级为E。}(1)switch后面的"表达式",可以是int、char和枚举型中的一种。(2)每个case后面“常量表达式”的值,必须各不相同,否则会出现相互矛盾的现象(即对表达式的同一值,有两种或两种以上的执行方案)。(3)case后面的常量表达式仅起语句标号作用,并不进行条件判断。系统一旦找到入口标号,就从此标号开始执行,不再进行标号判断,所以必须加上break语句,(4)各case及default子句的先后次序,不影响程序执行(5)多个case子句,可共用同一语句(组)。(6)用switch语句实现的多分支结构程序,完全可以用if语句或if语句的嵌套来实现。(1)顺序结构(2)选择结构/...(说明功能)*//...(说明功能)*/假假真真{循环体语句组;}语句真真假for循环语句:for([表达式1];[表达式2];[表达式3]){循环体语句组;}(1)赋值(2)判断[示例-1-3]用for语句求1~100的累计和[示例-2]求n的阶乘n!(n!=1*2*…….*n)(1)循环语句的循环体内,又包含另一个完整的循环结构,称为循环的嵌套。循环嵌套的概念,对所有高级语言都是一样的。{intlj;/*i外层循环变量控制行数,j内层循环控制每行个数*/命名:遵循标识符命名规则1printf("sun=%d\n",sum){printf("请输入一个整数:");scanf("%d",&m);{{{}良好的源程序书写习惯——注释(续):任何函数(包括主函数main())都是由函数说明和函数体两部分组成。根据函数是否需要参(1)无参函数的一般形式((2)有参函数的一般形式)/*[案例6.2]定义一个函数,用于求两个数中的大数。*//*功能:定义一个求较大数的函数并在主函数中调用*/{}{printf("max=%d\n",maxnumnum}返回值return(返回值表达式);(2)return语句的功能:返回调用函数,并将"返回值表达式"的值带给调用函数。注意:调用函数中无return语句,并不是不返回一个值,而是一个不确定的值。为了明确表示不返回值,可以用“void"定义成"无(空)类型”。在定义函数时,对函数类型的说明,应与return语句中、返回值表达式的类型一致。如果不一致,则以函数类型为准。如果缺省函数类型,则系统一律按整型处理。良好的程序设计习惯:为了使程序具有良好的可读性并减少出错,凡不要求返回值的函数都应定义为空类型;即使函数类型为整型,也不使用系统的缺省处理。函数定义不允许嵌套。在C语言中,所有函数(包括主函数main())都是平行的。一个函数的定义,可以放在程序中的任意位置,主函数main()之前或之后。但在一个函数的函数体内,不能再定义另一个函数,即不能嵌套定义空函数——既无参数、函数体又为空的函数。其一般形式为:在ANSIC新标准中,采用函数原型方式,对被调用函数进行说明,其一般格式如下:函数类型函数名(数据类型[参数名][数据类型[参数名2]..]);C语言同时又规定,在以下2种情况下,可以省去对被调用函数的说明:(1)当被调用函数的函数定义出现在调用函数之前时。因为在调用之前,编译系统已经知道了被调用函数的函数类型、参数个数、类型和顺序。(2)如果在所有函数定义之前,在函数外部(例如文件开始处)预先对各个函数进行了说明,则在调用函数中可缺省对被调用函数的说明。在程序中,是通过对函数的调用来执行函数体的,其过程与其它语言的子程序调用相似。C语言中,函数调用的一般形式为:/*[案例6.2]定义一个函数,用于求两个数中的大数。*//*功能:定义一个求较大数的函数并在主函数中调用*/{事{intmax(intnl,intn2):/*函数说明*/intnum1,num2;printf("inputtwonumbers:\n");scanf("%d%d",&num1,&num2);printf("max=%d\n",max(num1,mum2));}切记:实参的个数、类型和顺序,应该与被调用函数所要求的参数个数、类型和顺序一致,才能正确地进行数据传递.在C语言中,可以用以下几种方式调用函数:(1)函数表达式。函数作为表达式的一项,出现在表达式中,以函数返回值参与表达式的运算。这种方式要求函数是有返回值的。(2)函数语句。C语言中的函数可以只进行某些操作而不返回函数值,这时的函数调用可作为一条独立的语句。(3)函数实参。函数作为另一个函数调用的实际参数出现。这种情况是把该函数的返回值作为实参进行传送,因此要求该函数必须是有返回值的。(1)调用函数时,函数名称必须与具有该功能的自定义函数名称完全一致。(2)实参在类型上按顺序与形参,必须一一对应和匹配。如果类型不匹配,C编译程序将按赋值兼容的规则进行转换。如果实参和形参的类型不赋值兼容,通常并不给出出错信息,且程序仍然继续执行,只是得不到正确的结果。(3)如果实参表中包括多个参数,对实参的求值顺序随系统而异。有的系统按自左向右顺序求实参的值,有的系统则相反。TurboC和MSC是按自右向左的顺序进行的函数的形参与实参:(实现数据传递)形参:出现在函数定义中,只能在该函数体内使用。发生函数调用时,调用函数把实参的值复制1份,传送给被调用函数的形参,从而实现调用函数向被调用函数的数据传送。n}{(1)实参可以是常量、变量、表达式、函数等。无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此,应预先用赋值、输入等办法,使实参获得确定的值。(2)形参变量只有在被调用时,才分配内存单元;调用结束时,即刻释放所分配的内存单因此,形参只有在该函数内有效。调用结束,返回调用函数后,则不能再使用该形参(3)实参对形参的数据传送是单向的,即只能把实参的值传送给形参,而不能把形参的值(4)实参和形参占用不同的内存单元,即使同名也互不影响。(5)在参数传递中,形参值的改变并不能导致实参值的改变。函数的嵌套调用是指,在执行被调用函数时,被调用函数又调用了其它函数。这与其它语言的子程序嵌套调用的情形是类似的。/*[案例6.4]计算s=1k+2k+3k+……+nk*//*功能:函数的嵌套调用*/#include<conio.h>longf1(intn,intk)/*计算n的k次方*/{}longf2(intn,intk)/*计算1到n的k次方之累加和*/{}{printfSumofdpowersofintegersfromprintf("%d\n",f2(N,K)):getch():}函数的递归调用是指,一个函数在它的函数体内,直接或间接地调用它自身。执行递归函数将反复调用其自身。每调用一次就进入新的一层。为了防止递归调用无终止地进行,必须在函数内有终止递归调用的手段。常用的办法是加条件判断,满足某种条件后就不再作递归调用,然后逐层返回。{}{printfinputainteagernprintf("%d!=%ld\n",n,y)}/*[案例6.5]求年龄。有5个人坐在一起。问第5个人多少岁?他说比第4个人大2岁。问第4个人多少岁?他说比第3个人大2岁。问第3个人,他说比第2个人大2岁。问第2个人,他说比第1个人大2岁。问第1个人,说是10岁。*/c有效a、b有效c有效}外部变量:■在函数外部定义的变量称为外部变量。■外部变量不属于任何一个函数,其作用域是:从外部变量的定义位置开始,到本文外部变量可被作用域内的所有函数直接引用,所以外部变量又称全局变量。m、n有效关于全局变量的作用域还要说明以下几点:1.外部变量可加强函数模块之间的数据联系,但又使这些函数依赖这些外部变量,因而使得这些函数的独立性降低。从模块化程序设计的观点来看这是不利的,因此不是非用不可时,不要使用外部变量。2.在同一源文件中,允许外部变量和内部变量同名。在内部变量的作用域内,外部变量将被屏蔽而不起作用。3.外部变量的作用域是从定义点到本文件结束。如果定义点之前的函数需要引用这些外部变量时,需要在函数内对被引用的外部变量进行说明。外部变量说明的一般形式为:extern数据类型外部变量[,外部变量2..];注意:外部变量的定义和外部变量的说明是两回事。外部变量的定义,必须在所有的函数之外,且只能定义一次。而外部变量的说明,出现在要使用该外部变量的函数内,而且可以出现多次。/*[案例6.8]外部变量的定义与说明。*/{}{printf(}/*外部变量xh的说明*//*外部变量x1、xw、xh的定义*/变量的动态存储与静态存储从变量存在的时间(即生存期)来分,又可分为静态存储方式和动态存储方式。(2)存储特点□定义但不初始化,则自动赋以"0"(整型和实型)或\0'(字符型);且每次调用它们所在的函数时,不再重新赋初值,只是保留上次调用结束时的值!(3)何时使用静态内部变量动态存储——自动局部变量(又称自动变量)(auto)(1)定义格式:(2)存储特点□由于自动变量的作用域和生存期,都局限于定义它的个体内(函数或复合语句),因此不同的个体中允许使用同名的变量而不会混淆。即使在函数内定(1)只有局部变量才能定义成寄存器变量,即全局变量不行。(2)对寄存器变量的实际处理,随系统而异。例如,微机上的MSC和TC将寄存器变量实(3)允许使用的寄存器数目是有限的,不能定义任意多个寄存器变量。(1)定义的位置不同。(2)作用域不同。(3)初始化处理不同。静态局部变量,仅在第1次调用它所在的函数时被初始化,当再次调用定义它的函数时,不再初始化,而是保留上1次调用结束时的值。由最近1次给它赋值的操作决定。1维数组的定义和引用数组同变量一样,也必须先定义、后使用。1维数组是只有1个下标的数组,定义形(1)"数据类型"是指数组元素的数据类型。(2)数组名,与变量名一样,必须遵循标识符命名规则。(3)"常量表达式"必须用方括号括起来,指的是数组的元素个数(又称数组长度),它是(4)数组元素的下标,是元素相对于数组起始地址的偏移量,所以从0开始顺序编号。1.“下标表达式”可以是任何非负整型常量或常量表达式,取值范围2.1个数组元素,实质上就是1个变量,它具有和相同类型单个变量一样的属性,可3.在C语言中,数组作为1个整体,不能参加数据运算,只能对单个的元素进行处a数据类型数组名[常量表达式]={初值表}(1)如果对数组的全部元素赋以初值,定义时可以不指定数组长度(系统根据初值个数自的位置不同,数组有内部数组(在函数内部定义的数组)和外部数组(在函数外部定义的数组)之分。[案例]求数列112358132134.…前20个数。f[i]=f[i-2]+f[i-1];}案例]从键盘上任意输入10个整数,要求按从小到大的顺序在屏幕上显示出来。排序的方法有很多,本题采用冒泡法。冒泡法的基本思想:通过相邻两个数之间的比较和交换,使排序码(数值)较小的数逐渐从底部移向顶部,排序码较大的数逐渐从顶部移向底部。就像水底的气泡一样逐渐向上冒,故而得名。/*定义符号常量(数据个数N)*//*定义1个1维整型数组data*//*定义循环变量和临时变量*//*冒泡法排序*/for(i=0;i<NUM-1;i++)/*外循环:控制比较趟数*/printf("\ntheresultofsort:\n");/*输出排序后的数据*/}2维数组的定义和引用个元素的1维数组,如图所示。即把x[0]、x[1]、x[2]看作是3个1维数组的名字。组x[3][4],则可用的行下标范围为0~2,列下标范围为0~3。1114564151说明:杨辉三角形在本题中实际上是一个8×8的下三角矩阵。其特点是第0列和主对角线上的元素均为1,且其余元素均可以由其上一行元素求出,即每一个元素等于上一行同列元{],ij;}先行再列用于存储和处理1组字符或1个字符串,其定义格式与1维数值数组一样。用于同时存储和处理多组字符或多个字符串,其定义格式与2维数值数组一样。chard[2][3]={{'□',′*)操作",只起一个标志作用)。因此可以对字符数组采用另一种方式进行操作了——字符数组地再加1个。字符串设置了结束标志以后,对字符数组的初始化,就可以用字符(1)字符串的输入(2)字符串的输出}(2)函数功能:从标准输入设备(stdin)—键盘上,读取1个字符串(可以包含空格,直至(3)使用说明:(2)函数功能:把字符数组中所存放的字符串,输出到标准输出设备中去,遇到字符串的(3)使用说明1)字符串中允许包含转义字符,输出时产生一个控制操作。例如:输出ch常用的字符串处理函数如果:字符串1=字符串2,函数返回值等于0;字符串1>字符串2,函数返回值正整数。{printf(”a与b的比较的结果:%d\n",strcmp("a","b")):printf("b与a的比较的结果:%d\n",strcmp("b","a")):printf("a与a的比较的结果:%d\n",strcmp("a","a"));(1)指针——即地址(2)指针变量——专门用于存储其它变量地址的变量(3)为表示指针变量和它指向的变量之间的关系,用指针运算符“*”表示。(1)*,表示该变量为指针型变量;变量名为point1,而非*point1。(3)与一般变量的定义相比,除变量名前多了一个星号“*”(指针变量的定义标识符)(1)取地址运算(&)格式:指针变量=&对象变量(2)指针运算(取值)(*)j=*p;p==&a;即p与&a的结果一样,均为对变a的地址,对p的操作也即对&a的操作;*p==a;即*p与a的结果是一样的,均为对变a的数值int*p1,*p2,*p;p1=&ajp2=8b;int*p1,*p2,p;inta=3,b=4;p1=8a;p2=&bprintf("%d,%d\n",*p1,*p2);printf("%d,%d\n",*p1,*p2);指针变量作函数参数#include<stdio.h>voidexchange(intx,inty)*y=t;}t=x;y=t;}{intx=7,y=8jexchange(x,y);(1)赋值运算(2)加减算术运算pa++/pa--:指针pa所指向的当前位置向前/向后移动1个位置,并将新的指针赋值给注意,指针向前移动1个位置表示指针变量指向下一个数据元素的首地基础上加1。(3)两个指针变量间的运算:只有指向同一类型的两个指针变量才能进行运算。p1==p2,表达式为真,表示p1和p2p1<>p2,表达式为真,表示p1和p2不指向同一变量;p1==0,表达式为真,表示p1是空指针;p1!=0,表达式为真,表示p1不是空指针。向的内存单元的值(即a的值),a的值加1,送回a的内存单元,a的值变为3,pp的值发生了变化(指向变量a的下一数据单元),而a的值未发生变化。为3000+1*2=3002,而不是3001。}数组与x数组共用同一段内存单元,对x数组的操作也就是对主函数a数组的操作。for(;*s!='\0';s++)printf("%c注意:字符指针变量string中,仅存储串常量的地址,而串常量的内容(即字符串本身),s指向的第一个字符,然后使s自动加1,使之指向下一个字符;重复上述过程,直至遇到注意:其它类型的数组,是不能用数组名来一次性输出它(1)存储内容不同。字符指针变量中存储的是字符串的首地址,而字符数组中存储的是字(2)赋值方式不同。而字符数组,虽然可以在定义时初始化,但不能用赋值语句整体赋(4)在定义一个数组时,在编译时即已分配内存单元,有确定的地址。而定义字符指针变字符串指针作函数参数(2)赋值即实参是函数名,而形参是函数指变名,此时将实参函数名(即该函数的入口地址)传送给形参函数的指变,使形参函数指变指向实参函数的入口,从而转入函数)struct结构类型名/*struct是结构类型关键字*/数据类型数据类型数据项1;数据项2;数据项n;/*此行分号不能少!*/[案例10.1]定义一个反映学生基本情况的结构类型,用以存储学生的相关信息。/*功能:定义一个反映学生基本情况的结构类型*/(1)“结构类型名”和“数据项”的命名规则,与变量名相同。(2)数据类型相同的数据项,既可逐个、逐行分别定义,也可合并成一行定义。例如,本案例代码中的日期结构类型,也可改为如下形式:(3)结构类型中的数据项,既可以是基本数据类型,也允许是另一个已经定义的结构类型。(4)本书将1个数据项称为结构类型的1个成员(或分量)。用户自己定义的结构类型,与系统定义的标准类型(int、char等)一样,可用来定义 结构变量student:拥有结构类型的全部成员,其中birthday成员是一个日期结构类型,它又由3个成员构成。 }结构变量表;(2)结构类型中的成员名,可以与程序中的变量同名,它们代表不同的对象,互不干扰。(3)结构体变量表中每个结构体变量均包含成员表中不同类型的结构体成员。(4)结构体名仅是结构体的名称而已,编译时系统不为其分配内存,程序中也不允许对其对于结构变量,要通过成员运算符".",逐个访问其成员,且访问的格式为:结构变量.成员/*其中的""是成员运算符*/(1)对最低一级成员,可像同类型的普通变量一样,进行相应的各种运算。(2)既可引用结构变量成员的地址,也可引用结构变量的地址。结构数组[n]={{初值表1},{初值表2},.,{初值表n}}指向结构变量的指针:_structstdinfostudent=_(3)(*pointer).成员/*"*pointer"外面的括号不能省!*/指向结构数组的指针:如果指针变量p已指向某结构数组,则p+1指向结构数组的下一个元素,而不是当前元另外,如果指针变量p已经指向一个结构变量(或结构数组),就不能再使之指向结构变量(或结构数组元素)的某一成员。#include"struct.h'链表是动态存储分配的数据结构,是指若干个数据(每个元素称为“结点”(1)头指针变量head—指向链表的首结点。(2)每个结点由2个域组成:(1)数据域——存储结点本身的信息。(2)指针域——指向后继结点的指针。在C语言中,用结构类型来描述结点结构。例如:对链表的基本操作ppp女3女_{/*结点1*//*结点2*//*结点3*//*结点4*/printf("学号\t姓名性别身高体重出生日期电话\t住址\n

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论