《程序员考试强化》word版.doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《《程序员考试强化》word版.doc》由会员分享,可在线阅读,更多相关《《程序员考试强化》word版.doc(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 指 针 (一)变量的指针和指向变量的指针变量1、变量的指针就是指变量的地址。2、指针变量:用来专门存放地址的变量例如:int a=5,*p=&a;*代表取后面所表示的地址中的内容。&代表取后面内容所存放的地址。3、指针变量可作为函数的参数此时,形参与实参是共用一个内存空间的。注意是以指针变量,还是以指针变量的内容作为参数(二)数组的指针和指向数组的指针变量1、数组的指针就是数组的起始地址,数组元素的指针就是指存放数组元素的地址。2、指向数组元素的指针。这里的定义与指向变量的指针定义相同。只是这时给变量赋值是不是普通变量的地址,而是数组元素的地址。例如:int a10,b,*p=a;在C中规定
2、:数组名就代表数组的首地址,因此a与&a0在值上是等价的。故:p=a可写成p=&a0;3、通过指针引用数组元素。定义一个指向数组元素的指针p,然后将一个存在的数组的首地址给p,然后就可以通过p来引用数组中的元素。C中规定:如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素(而不是将p的值简单加1)。例如:数组元素是实型,每个元素需要占4个字节,则p+1意味着使p的值(地址)加4个字节,以使它指向下一个元素。我们看一个例子:int a10,*p=a;(1)p+I和a+I就是aI的地址,即,p+I,a+I,&aI三者等价。其中a+I中的I跟p+I中的I的意义一样。(2)*(p
3、+I)或*(a+I)或aI是指数组的元素。而且三者是代表同一个元素。(3)指向数组的指针变量也可以跟数组名一样使用下标来引用。即pI与aI等价。4、几个注意点:(1)指针变量可以实现自身的值的改变。如:p+;而数组名则不允许,如:a10中,a代表数组a的首地址,如果可以自加运算的话,也就是数组在内存中存放的位置是随意变化的这是不可能的,因为只要分配空间后,不可能再移动的。故:a+是错误的。(2)要注意指针变量当前值。因为指针在移动后,如果不进行复位,则它不能象数组名一样每次使用时都代表首地址,故当指针移动时可能超出范围。(3)指针变量的运算p+使p指向下一个元素。*p+,由于+和*同优先级,结
4、合方向为自右向左,因此它等价于*(p+)。作用是:先得到p指向的变量的值(即*p),然后再使p+1p。*(p+)与*(+p)作用不同。前者是先取*p,后使p加1;后者是先使p加1,再取*p。(*p)+表示p所指向的元素值加15、指向多维数组的指针和指针变量(1)多维数组的地址。(以二维数组为例)这里我们可以将二维数组看成一维数组的一维数组。如:int a1010;对第一行:a0I:可以看成是数组名为a0的一维数组。其它的同理。故如果写出a0+1,当然就代表a数组中的第二行的首地址,而不是a数组中的第二个元素的地址。*(a0+1)同样代表第二行的首地址,只是此时将该表达式加1时,不是在跑到下一行
5、啦,而是在本行朝后移一个,也就是下一个元素的地址啦。下表小结:6、字符串的指针和指向字符串的指针变量(1)字符串的指针:指字符串的首地址。(2)字符串的表示形式用字符数组存放一个字符串。如:char str1=”china”,str2=“china”,str3=a,b,0用字符指针指向一个字符串。如:char*str1=”china”;char*str1;str1=”china”;这里是指将字符串的首地址赋给str1;注意:char*a;scanf(“%s”,a);这种方法C不会提示错误,但是不允许的,因为指针变量a,定义了,但没有指它指定具体的空间,故无法正确存放你输入的字符串。7、指针运算
6、小结指针变量加(减)一个整数C语言规定,一个指针变量加(减)一个整数并不是简单地将指针变量的原值加(减)一个整数,而是将该指针变量的原值(是一个地址)和它指向的变量所占用的内存单元字节数相加(减)。如p+I代表地址计算:如果p为整型,则该式代表p+I*2;指针变量赋值将一个变量地址赋给一个指针变量。Int*p,a=100;p=&a;指针变量可以有空值,即该指针变量不指向任何变量,表示成p=NULL,其中NULL是整数0.两个指针变量可以相减如果两个指针变量指向同一个数组元素,则两个指针变量值之差是两个指针之间的元素个数,但两个指针变量相加就没有实际意义啦。两个指针变量比较若两个指针指向同一个数
7、组元素,则可以进行比较。 结构体 结构体属于构造类型,前面我们已学过的数组,它中间的各元素是属于同一类型的。但这远远不足,我们大量的是需要同一个数据中能包含多个不同类的数据,这就是结构体产生的原因。结构体的定义:Struct结构体名/结构体名是用作结构体类型的标志它不等于变量名成员表列;1、结构体类型变量的定义struct dateint day;int month;int year;struct studentint num;/学号char name20;struct date birthday;/属于结构体类型的student1,student2;或者:struct student stu
8、dent1,student2其内存空间:2+1*20=22字节注:对结构体中的成员(即“域”),可以单独使用,它的作用与地位相当于普通变量。成员也可以是结构体变量。2、结构体变量的引用(1)不能将一个结构体变量作为一个整体进行输入/出。例如:上面的student1。只能具体到其中的具体变量才行。成员变量的引用方式:student1.num“.”是成员(分量)运算符,它在所有运算符中优先级最高。(2)如果成员本身又属于一个结构体类型,则要用若干个成员运算符,一级一级地找到最低的一级的成员。只能对最低级的成员进行赋值或存取运算。例如:上面的取学生生日的年份:student1.birthday.ye
9、ar(3)对结构体变量的成员可以像其它变量一样进行各种运算,可以引用结构体变量成员的地址,也可以引用结构体变量的地址。如:student1.num+;&student1.num;&student1;但不能对结构体变量整体引用。例如这条语句是不对的:scanf(“%d,%s,%d”,&student1);因此,结构体变量的初始化就可以和普通变量的初始化一样。3、结构体数组例:有10个学生的信息需要处理,我们可以定义10个结构体类型的变量,但那样变量的管理比较烦,这时我们就可以通过结构体数组来管理,struct student stu10;具体使用是数组与结构体的合并使用,比如:第一个学生的学号,
10、stu0.num4、指向结构体类型数据的指针一个结构体变量的指针就是该变量所占据的内存段的起始地址。可以设一个指针变量,用来指向一个结构体变量,此时该变量的值是结构体变量的起始地址。指向结构体变量的指针例:struct student stu1,*p;p=&stu1; stu1.num与(*p).num相同,都代表学号,注:对指针(*p)两边的括号不能省。如省略则变成*p.num因为“.”的优先级最高,所以相当于*(p.num)这是不对的。对其中成员变量的引用用以下三种形式:结构体变量.成员名(*p).成员名p-成员名三者等价。注:p-n得到p指向的结构体变量中的成员n的值。p-n+得到p指向
11、的结构体变量中的成员n的值,用完该值后使它加1+p-n得到p指向的结构体变量中的成员n的值,使它加1后再使用。指向结构体数组的指针定义一个指向结构体数组的指针变量,这与前面定义指向数组或结构体变量的方法差不多。例:struct student stru110,*p;p=stru1;注意,这时指针是指向结构体数组,其类型还是结构体,其中p可以加1,但这里加1后是指向数组的下一个元素,而不是在当前结构体中移动。例:struct studentint num;char name20;char sex;int age;struct student stu3=10101,”li”,M,18,10102,
12、”zhang”,M,19,10104,”wang”,F,20;main()struct student*p;printf(“No.name sex agen”);for(p=stu;pnum,p-.name,p-sex,p-age);打印结果:No.Name sex age10101 li M 1810102 zhang M 1910104 wang F 205、用指针处理链表(1)链表概述链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构。链表有一个“头指针”变量,它存放一个地址。该地址指向链表第一个元素。链表中每一个元素称为“结点”,每个结点都应包括两个部分:一为用户需要用的
13、实际数据,二为下一个结点的地址。例:定义一个存放学生学号及成绩的结构体结点,并建立含有三个学生的简单链表。struct studentint num;float score;struct student*nex;main()struct student a,b,c,*head,*p;a.num=9901;a.score=89.4;b.num=9903;b.score=79;c.num=9902;c.score=80;head=&a;a.next=&b;b.next=&c;c.next=NULL;p=head;doprintf(“%d%5.1fn”,p-num,p-score);p=p-next
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序员考试强化 程序员 考试 强化 word
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内