C语言实验六实验报告——指针
- 格式:doc
- 大小:178.00 KB
- 文档页数:7
C语⾔教材第七章指针实验第七章指针第⼀部分知识训练【知识要点】1. 地址与指针指针变量的概念:⽤⼀个变量专门来存放另⼀个变量的地址。
2. 指向变量的指针变量指针变量的形式:基类型 *指针变量名;&: 取地址运算符;*:指针运算符。
3. 指针与数组引⽤⼀个数组元素可以⽤下标法和指针法;可以⽤数组名作函数的参数。
4.指针与函数函数指针变量定义的⼀般形式为:类型说明符 (*指针变量名)();⼀个函数的返回值可以是⼀个函数。
【典型习题与解析】5. char * const p;char const * pconst char *p上述三个有什么区别?【解析】char * const p; //常量指针,p的值不可以修改;char const * p;//指向常量的指针,指向的常量值不可以改;const char *p; //和char const *p。
6. main(){int a[5]={1,2,3,4,5};int *ptr=(int *)(&a+1);printf("%d,%d",*(a+1),*(ptr-1));}输出结果是什么?【解析】答案:输出:2,5*(a+1)就是a[1],*(ptr-1)就是a[4],执⾏结果是2,5。
&a+1不是⾸地址+1,系统会认为加⼀个a数组的偏移,是偏移了⼀个数组的⼤⼩(本例是5个int)。
1)&a是数组指针,其类型为 int (*)[5];⽽指针加1要根据指针类型加上⼀定的值,不同类型的指针+1之后增加的⼤⼩不同。
2)a是长度为5的int数组指针,所以要加 5*sizeof(int),所以ptr实际是a[5],但是prt与(&a+1)类型是不⼀样的(这点很重要),所以prt-1只会减去sizeof(int*) a,&a的地址是⼀样的,但意思不⼀样。
3)a是数组⾸地址,也就是a[0]的地址,&a是对象(数组)⾸地址,a+1是数组下⼀元素的地址,即a[1],&a+1是下⼀个对象的地址,即a[5]。
c语言实验报告c语言实验报告5篇随着社会一步步向前发展,我们使用报告的情况越来越多,我们在写报告的时候要注意涵盖报告的基本要素。
其实写报告并没有想象中那么难,以下是小编收集整理的c语言实验报告,欢迎阅读与收藏。
c语言实验报告1学号:__________ 姓名:__________ 班级:__________ 日期:__________指导教师:__________ 成绩:__________实验六综合实验一、实验目的1、掌握C语言中的变量、数组、函数、指针、结构体等主要知识点。
2、掌握C程序的结构化程序设计方法,能使用C语言开发简单的应用程序。
3、掌握C程序的运行、调试方法等。
二、实验内容编写一个学生信息排序程序。
要求:1、程序运行时可输入n个学生的信息和成绩(n预先定义)。
2、学生信息包括:学号、英文姓名、年龄;学生成绩包括:语文、数学、计算机。
3、给出一个排序选择列表,能够按照上述所列信息(学号、姓名、年龄、语文、数学、计算机)中的至少一个字段进行排序,并显示其结果。
1、使用函数方法定义各个模块。
三、实验步骤与过程物理实验报告·化学实验报告·生物实验报告·实验报告格式·实验报告模板四、程序调试记录c语言实验报告2第一章基础掌握1.1 实验目的掌握C程序设计编程环境Visual C++,掌握运行一个C程序的基本步骤,包括编辑、编译、链接和运行。
(]1.2 实验要求在报告中记录建立、保存C程序实习过程。
1.3 实验基本内容编写程序,在屏幕上显示一个短句“Hello World”(1)程序:1)编译如下程序:#includeVoid main(){printf (“Hello World! ”);}2)链接。
执行Build-命令。
3)运行。
执行Build Execute 命令。
显示结果。
4)关闭程序工作区。
(2)运行结果:输出结果:Hello World!总结:掌握C语言程序设计的基本框架,能够编写简单的程序。
c语言指针详细讲解
C 语言中指针是非常强大的概念,它允许程序直接访问内存中的数据。
指针在 C 语言中最初是被用于解决内存分配问题而提出的,随着 C 语言的发展,指针也变得愈发重要。
指针的本质是一个存储变量地址的变量。
在 C 语言中,指针通常用符号&来表示,例如&x 表示的是 x 变量的地址。
指针变量存储的是一个内存地址,当程序读取指针变量时,它会读取该地址中存储的数据。
C 语言中可以使用指针进行高效的内存操作。
例如,当程序需要对一个数组元素进行修改时,可以直接用指针修改该元素的值,而不必修改数组名本身。
另外,指针还可以用于动态分配内存,这是 C 语言中一个重要的特性。
指针的使用方法比较灵活,但也需要小心使用。
如果不小心处理指针,可能会导致未知的错误。
例如,当指针指向的内存空间被释放后,程序试图访问该内存空间时可能会导致未定义的行为。
因此,在C 语言中,指针的使用需要更加谨慎。
C 语言中指针是一个非常重要和强大的概念,掌握指针的使用方法可以让程序员写出更加高效和安全的代码。
实验六函数一、实验目的1. 熟练掌握函数的定义、函数的类型和返回值。
2. 熟练掌握形式参数与实际参数、参数值的传递。
3. 掌握函数的嵌套调用与递归调用。
4.学会使用指向函数的指针变量。
5.了解指向指针的指针的概念及带参数的main函数。
6. 掌握局部变量和全局变量。
7. 掌握变量的存储类型。
8. 了解内部函数和外部函数。
二、实验学时:8课时三、预习知识1.标准库函数标准库函数是C系统提供的,这些库函数定义了一些基本的、常用的功能,用户可以使用这些库函数,但是在使用库函数之前需要用预编译命令# include将该库函数所在的头文件包含进来。
2.自定义函数定义函数一般有两种形式形式1:存储类型类型符函数名(类型符形参1,类型符形参2 ,… ) { 说明语句执行语句}形式2:存储类型类型符函数名(形参1,形参2 ,……)形参类型说明{ 说明语句执行语句}说明:①形参表中即使没有参数,函数名后的一对圆括号也不能省略。
②函数名前的类型符是用来说明函数返回值的数据类型(也作为函数的数据类型) 。
当函数值为整型时,类型符可以省略。
③当函数只完成某一特定操作不需要返回值时,可用类型标识符 void 说明,将函数定义成空类型。
④C 规定:不允许在一个函数内部再定义另外一个函数,即函数不允许嵌套定义。
⑤函数的存储类型:函数的存储类型有 extern 和 static 两种。
extern 型的函数除了可以被本程序中其它函数调用外,还可以被其它文件中的函数调用,这种函数称为外部函数,如果定义函数时省略 extern ,则隐含为外部函数。
static 型的函数只能被本源程序文件中的函数调用,称为内部函数(静态函数)。
3.函数的参数(1)在定义函数时函数名后面括号中的变量称为形参(形式参数),如果有两个以上形参,形参之间以逗号分隔。
形参是函数的内部变量,只在函数内部才有意义。
在未出现函数调用时,形参不占内存。
对每个形参必须指明其名字和数据类型。
***
软件类实验报告
课程名称:C语言程序设计学号:
姓名:
班级:
指导教师:
开课学期:
学院:
***教务处
⑶用指针数组处理多个字符串数据。
四、实验过程及内容:(运行结果请抓图到对应题目的下方)
1.输入并运行以下程序,分析程序运行结果。
实际参数:
输出结果:
2.输入并运行以下程序,分析程序运行结果。
实验结果:
3.输入并运行以下程序,分析程序运行结果。
程序代码:
实验结果:
4. 输入并运行以下程序,分析程序运行结果。
调试下列程序,使之具有如下功能:任意输入2个数,调用两个函数分别求: ⑴ 2个数的和
⑵ 2个数交换值。
相关知识:①调试程序时注意参数传递的是数值还是地址。
②指针作为参数;③利用指针得到多个返回值。
程序代码:
5. 上机验证以下程序的运行结果
分析输出结果,若将函数调用f(m)改为f(a),输出结果又如何?
相关知识:①多级指针的使用;②多级指针与字符数组的操作。
五、实验小结。
c语言中的指针详解在C语言中,指针是一种特殊的变量类型,它存储了一个变量的内存地址。
通过指针,我们可以间接访问和修改内存中的数据,这对于一些需要动态分配内存的操作非常有用。
以下是关于C语言指针的一些详细解释:1. 定义指针:使用"*"符号来定义指针变量。
例如,int* ptr; 定义了一个指向整型变量的指针 ptr。
2. 取址操作符(&):取地址操作符(&)用于获取变量的内存地址。
例如,&a 返回变量 a 的地址。
3. 解引用操作符(*):解引用操作符(*)用于访问指针所指向的变量的值。
例如,*ptr 返回指针 ptr 所指向的整型变量的值。
4. 动态内存分配:可以使用相关的库函数(如malloc和calloc)在运行时动态分配内存。
分配的内存可以通过指针来访问和使用,并且在使用完后应该使用free函数将其释放。
5. 空指针:空指针是一个特殊的指针值,表示指针不指向任何有效的内存地址。
可以将指针初始化为NULL来表示空指针。
6. 指针和数组:指针和数组在C语言中有密切的关系。
可以通过指针来访问数组元素,并且可以使用指针进行指针算术运算来遍历数组。
7. 传递指针给函数:可以将指针作为函数参数传递,以便在函数内部修改实际参数的值。
这种传递方式可以避免拷贝大量的数据,提高程序的效率。
8. 指针和字符串:字符串在C语言中实际上是以字符数组的形式表示的。
可以使用指针来访问和操作字符串。
需要注意的是,指针在使用时需要小心,因为不正确的操作可能导致程序崩溃或产生不可预料的结果。
对于初学者来说,理解指针的概念和使用方法可能需要一些时间和练习。
《高级语言程序设计》实验指导学院:信息科学与技术学院专业:信息管理与信息系统学期:2010~2011学年第二学期教师:目录实验1 熟悉C语言程序开发环境 (1)1.1 实验目的 (1)1.2 实验预习 (1)1.3 实验任务 (1)实验2 数据描述 (6)2.1 实验目的 (6)2.2 实验预习 (6)2.3 实验任务 (6)实验3 顺序结构程序设计 (10)3.1 实验目的 (10)3.2 实验预习 (10)3.3 实验任务 (10)实验4 选择结构程序设计 (13)4.1 实验目的 (13)4.2 实验预习 (13)4.3 实验任务 (13)实验5 循环结构程序设计 (16)5.1 实验目的 (16)5.2 实验预习 (16)5.3 实验任务 (16)实验6 函数与编译预处理 (22)6.1 实验目的 (22)6.2 实验预习 (22)6.3 实验任务 (22)实验7 数组 (28)7.1 实验目的 (28)7.2 实验预习 (28)7.3 实验任务 (28)实验8综合实验 (33)8.1 实验目的 (33)8.2 实验预习 (33)8.3 实验任务 (33)实验9 指针 (36)9.1 实验目的 (36)9.2 实验预习 (36)9.3 实验任务 (36)实验10 结构体数据类型与链表 (40)10.1 实验目的 (40)10.2 实验预习 (40)10.3 实验任务 (40)实验11 共用体数据类型 (43)11.1 实验目的 (43)11.2 实验预习 (43)11.3 实验任务 (43)实验12 文件 (45)12.1 实验目的 (45)12.2 实验预习 (45)12.3 实验任务 (45)实验13 综合实验 (48)13.1 实验目的 (48)13.2 实验预习 (48)13.3 实验任务 (48)实验1 熟悉C语言程序开发环境院(系):信息科学与技术学院课程名称:高级语言程序设计教师签名:1.1 实验目的1.了解和掌握C语言的主要特点。
实验8 指针一、实验目的1、通过实验进一步掌握指针的概念,会定义和使用指针变量;2、能正确使用数组的指针和指向数组的指针变量;3、能正确使用字符串的指针和指向字符串的指针变量;二、实验内容和步骤1、改错(1)指出下面程序错误的原因.main( ){ int x=10,y=5,*px,*py;px=py;px=&x;py=&y;printf("*px=%d,*py=%d,*px,*py);}#include<stdio.h>void main(){ int x=10,y=5,*px,*py;px=&x;py=&y;printf("px=%d,py=%d",*px,*py);}(2)下面的程序试图有如下运行结果:which style you want to :Capital ( c ) or uncapital ( a ):c ↙COMPUTERWhich sytle you want to :Capital ( c ) or uncapital ( a ) : u↙computer请调试下面的程序,使其有如上执行结果.#includemain (){ char s*;char c;printf("which style you want to :ln");printf("capital ( c ) or uncapital(a):");c=getchar();……if(c='c')strcpy(s,"COMPUTER");else strcpy(s,"computer");put(s);}#include<stdio.h>#include<string.h>#include<stdlib.h>void main(){ char *s;char c;printf("which style you want to :\n");printf("capital(c) or uncapital(a):");c=getchar();s=calloc(20, sizeof(char)); //分配存储空间if(c=='c')strcpy(s,"COMPUTER");elsestrcpy(s,"computer");puts(s);}(3)下面的程序能获得上述运行结果吗main(){char *S="COMPUTER";char c;printf("which style you want to \n"); printf("capital (c) or uncapital(u);"); c=getchar();if(c='c')put(s);else {s="computer";puts(s);}} #include<stdio.h>void main(){ char *s="COMPUTER";char c;printf("which style you want to:\n");printf("capital(c) or uncapital(u);");c=getchar();if(c=='c')puts(s);else{ s="computer";puts(s);}}(4)设计一个C程序,用以测试下列各表达式的运算.(1) y=*px++(2) y=*++py(3) y=(*py)++(4) y=--*ppx++(5)想使指针变量pt1指向a 和b 中的大者,pt2指向小者,以下程序能否实现此目的swap(int *p1,int *p2) {int *p;p=p1;p1=p2;p2=p;}main(){int a,b; scanf("%d,%d",&a,&b);pt1=&a;pt2=&b;if(a<b)swap(pt1.pt2);printf("%d,%d\n",*pt1,*pt2); }#include<stdio.h>void swap(int *p1,int *p2) { int p;p=*p1;*p1=*p2;*p2=p;}void main(){ int a,b,*pt1,*pt2;scanf("%d,%d",&a,&b);pt1=&a; pt2=&b;if(a<b)swap(&pt1,&pt2);printf("%d,%d\n",*pt1,*pt2); }2、程序填空:(1)一维数组和指针。
c语言指针的使用在 C 语言中,指针是一种非常重要的数据类型,它可以用来操作内存中的数据。
使用指针可以简化代码、提高程序的效率,同时也可以更好地控制程序的内存分配。
C 语言中字符串本身就是一个指针,指针的指针当然可以指向字符串。
在输出字符串时,应该从指针开始的位置开始输出,直到遇到指向的字符为止,并将其转换为字符数组的数组名来进行输出。
例如,以下代码是正确的用法:```char str[] = "hellow";char str2[20];printf("%s", str);strcpy(str2, str);```在以上代码中,字符串 "hellow" 被存储在内存地址$0x7ffee8f3c18 处,因此可以将该地址作为指针来访问该字符串。
输出该字符串时,应该从指针 str 开始输出,直到遇到指向的字符为止,即 "0"。
因此,可以使用 printf 函数输出该字符串,代码如下:```char str[] = "hellow";char str2[20];printf("%s", str);strcpy(str2, str);```以上代码是正确的用法,它会输出字符串 "hellow"。
指针还可以用于对计算机的内存进行分配和控制。
在函数调用中,指针可以用来返回多个值。
此外,指针还可以用于读取和修改变量的值,以及在程序中传递参数。
指针是 C 语言中一个非常重要的概念,掌握指针的使用可以让程序更加简洁、高效、易于维护。
c语言实践报告总结范文2篇【c语言实践报告总结例一】一、实习时间:20xx年x月x日—20xx年x月x日二、实习地点:第一微机室三、实习目的:1、熟悉我们自己所用的计算机的C语言开发环境,并且能够熟练掌握,达到错误能找到原因并且加以改正。
2、加深对课本理论知识的理解,进一步掌握书中重点、难点实例,锻炼自己的编写程序能力和实际应用能力。
3、上机调试程序的过程中,发现错误,解决错误,保证程序的正确运行,运行结果与给定结果完全相同。
4、学会用书中基本知识解决实际中的一些问题,将书本所学的内容与实际操作相结合,掌握把实际问题转变为C语言描述的算法的方法,明确思路。
将自身的不足与缺陷改掉,养成良好编辑风格5、培养我们的主观能动性、沟通、表达能力和团队合作意识,为我们以后的发展打下基础。
四、实习内容及方法:在本次实习中,我们采用了由浅及深、由易到难的实习方法,而且也是按照书本的教学进程内容进行的,同时采取了实际应用与理论相结合的方法,在机房里面实习,一边理解,思考做题的思路与解法,另一边就可以马上进行上机实际操作。
这对于我们加深对C语言的理解、操作以及动手能力都有了很大的帮助与提高。
实训的内容主要分为了七个版块:第一版块:1、Turbo C运行环境。
了解TC的基本环境,熟悉常用菜单项和快捷键:在这一小节中,需要熟练的掌握并应用Turbo C的运行环境,和基本配置。
Turbo C 是在计算机上广泛使用的一个C语言开发环境,它具有方便、直观、易用的界面和丰富的函数库。
它把程序的编辑、编译、连接和运行等操作去不都集中在一个界面上进行,使用非常方便。
并且Turbo C不需要特别安装,只需要将其拷贝到硬盘上就可以使用了。
为了方便管理用户的程序文件和维Turbo C2.0的运行环境,客户应在机子上建立自己的工作目录,一边用来存放自己所需要开发的源程序文件。
下面就是建立怎样自己文件夹,在空白区域内输入自己所建立的文件夹路径即可。
c语言实验报告模板一、实验目的二、实验环境三、实验内容1. 实验一:基本数据类型和运算符的使用a. 实验过程b. 实验结果与分析2. 实验二:条件语句和循环语句的使用a. 实验过程b. 实验结果与分析3. 实验三:函数的定义和调用a. 实验过程b. 实验结果与分析4. 实验四:指针的使用和数组的应用a. 实验过程b. 实验结果与分析四、实验总结一、实验目的:本次实验旨在通过C语言程序设计,深入了解C语言程序设计基础知识,掌握C语言程序设计方法,提高C语言程序设计能力。
二、实验环境:操作系统:Windows 10;编译器:Dev-C++;开发工具:Visual Studio Code。
三、实验内容:1. 实验一:基本数据类型和运算符的使用a. 实验过程:首先,我们需要在Dev-C++中新建一个源文件,然后编写代码。
代码如下:#include <stdio.h>int main() {int a = 10;float b = 3.14;char c = 'A';printf("a = %d\n", a);printf("b = %.2f\n", b);printf("c = %c\n", c);int sum = a + b;float sub = a - b;float mul = a * b;float div = a / b;printf("sum = %d\n", sum);printf("sub = %.2f\n", sub);printf("mul = %.2f\n", mul);printf("div = %.2f\n", div);return 0;}b. 实验结果与分析:运行程序后,我们可以得到以下输出结果:a = 10b = 3.14c = Asum = 13sub = 6.86mul = 31.40div = 3.18通过以上输出结果,我们可以看出C语言中基本数据类型和运算符的使用方法。
一、 实验项目名称 指针 二、 实验目的 1.掌握指针的基本概念和基本用法。包括:变量的地址和变量的值,指针变量的说明、指针变量的初始化、指针的内容与定义格式、指针的基本运算等;
2.掌握数组与指针的关系并能够利用指针解决数组的相关问题; 3.掌握字符串与指针的关系并能够利用指针处理字符串的问题; 4.掌握指针与函数的关系并能够利用指针处理函数问题; 5.了解指向指针的指针的概念及其使用方法; 6.能够使用指针进行程序设计。
三、 实验内容 有关指针的程序设计 1.编程实现:任意输入的10个数,求其平均值。 要求: (1)10个数采用scanf语句读入。 (2)利用指针实现对这10个数的访问。 (3)要求平均值的精度为小数后面2位。 2.编程实现:将一个任意整数插入到一个已排序的整数数组中,插入后数组中的数仍然保持有序。
要求: (1)整数数组由初始化方式输入。任意整数由scanf函数输入; (2)实现过程采用指针处理; (3)输出原始数组数据以及插入数据后的数组数据并加以相应说明。 3.编写函数newcopy(char *new,char *old),它的功能是删除old所指向的字符串中的小写字母,并将所得到的新串存入new中。
要求: (1)在主函数中以初始化方式输入一个字符串; (2)调用newcopy()函数; (3)在主函数中输出处理后的结果。 4.编程实现:输入三个整数,按由大到小的顺序输出。 要求: (1)通过scanf函数输入三个数据并存入三个变量中; (2)利用指针实现从大到小输出; (3)修改程序,将三个整型数据改为字符型数据,输入三个字符,按从大到小数顺序输出;
(4)修改程序,将三个字符型数据改为字符串数据,输入三个字符串,按从小到大顺序输出;
(5)体会指针对不同数据处理的特点。
四、 实验步骤及结果 一、 #include void main() { int a[10],n,sum=0; float aver;/* 定义平均数为浮点型*/ int *p=a;/*初始化*/ printf("Please input 10 numbers:\n"); for (n=0;n<10;++n) scanf("%d",&a[n]);/*输入十个数*/ for (n=0;n<10;++n) sum=sum+*(p+n);/*使用指针访问数据*/ aver=(float)sum/n; printf("Average is %.2f",aver);/*精确到小数点后两位*/ }
二、 #include void arr(int *a,int n);/*定义排序函数*/ void insert(int *a,int num);/*插入并排序函数*/ int n=10;/*定义数据个数,可修改*/ void main() { int *a,num,j,k,b[10]; printf("请输入个数据:\n"); for (j=0;jscanf("%d",&b[j]);/*输入原始数据*/ a=&b[0];/*初始化*/ arr(a,n);/*调用排序函数*/ printf("排序好的数据为:\n"); for (j=0;jprintf("%d ",*(a+j));/*输出排序好的原始数据*/ printf("\n请输入要插入的数:"); scanf("%d",&num); printf("插入%d后的数据为:\n",num); insert(a,num);/*调用插入并排序函数*/ } void arr(int *a,int n)/*排序函数*/ { int k,j,h; for (k=0;k<10;++k) for (j=0;jif (*(a+1+j)<*(a+j)){ h=*(a+1+j); *(a+1+j)=*(a+j); *(a+j)=h; } } void insert(int *a,int num) { void arr(int *a,int n); int j,k; *(a+n)=num;/*将插入的数排在数组最后一位*/ arr(a,n+1);/*将新数组重新排序*/ for (j=0;j<(n+1);++j) if (*(a+j)==num){ k=j; break;}/*找到插入的数在数组中的位置*/ for (j=0;j<(n+1);++j) printf("%d ",*(a+j)); printf("\n插入的数据排在数组的第%d位",k+1); } 三、 #include void newcopy(char *new1,char *old); void main() { char *new1,*old,a[10];/*new是不能当做变量,所以用new1*/ old=a; new1=a;/*字符串的初始化*/ printf("请输入字符串:\n"); scanf("%s",a); newcopy(new1,old);/*调用函数*/ printf("新的字符串为:\n"); printf("%s",new1); }
void newcopy(char *new1,char *old) { int n,j=0; for (;* old!='\0';++old) if ((* old)>'z' || (* old)<'a'){ * (new1+j)=* old; ++j;}/*排除原字符串中的小写字母,将其他字符存入新字符串*/ *(new1+j)='\0';/*结束新字符串,否则新字符串的输出会故障*/ } 四、 #include void main() { void exchange(int *q1,int *q2,int*q3); int a,b,c,*q1,*q2,*q3; printf("请输入个数:\n"); scanf("%d,%d,%d",&a,&b,&c); q1=&a;q2=&b;q3=&c;/*将三个数的地址存入q1q2q3中*/ exchange(q1,q2,q3);/*调用排序函数*/ printf("3个数从大到小排列为:\n%d,%d,%d",a,b,c); }
void exchange(int *q1,int *q2,int *q3) { void swap(int *q1,int *q2);/*调用交换函数*/ if (*q1<*q2) swap(q1,q2);/*若*q1小于*q2,交换地址位置*/ if (*q1<*q3) swap(q1,q3); if (*q2<*q3) swap(q2,q3); } void swap(int *q1,int *q2)/*交换函数*/ { int n; n=*q1; *q1=*q2; *q2=n; } 修改程序,将三个整型数据改为字符型数据,输入三个字符,按从大到小数顺序输出:只需将程序中的所有int改为char,将%d改为%c即可。 修改程序,将三个字符型数据改为字符串数据,输入三个字符串,按从小到大顺序输出: #include #include #include int cmp(char *p1,char *p2) /* 字符串比较函数*/ { int i=0; while (*(p1+i)==*(p2+i)) if (*(p1+i++)=='\0') return 0; /* 这里是先判断*(p1+i)=='\0',然后再是i++ */ return (*(p1+i)-*(p2+i)); }
void sort(char *a[3]) /*排序函数*/ { char *temp; int i,j; for(i=0;i<3-1;i++)/* 选择排序*/ for(j=i+1;j<3;j++) if(cmp(a[i],a[j])>0) {temp=a[i]; a[i]=a[j]; a[j]=temp;} } void main() { int i; char s[3][81],*p[3];/* 设定每个字符串不超过字节*/ printf("请输入3个字符串:\n"); for(i=0;i<3;i++) { gets(s[i]); p[i]=s[i]; } sort(p); printf("字符串从小到大排序为:\n"); for(i=0;i<3;i++) printf("%s\n",p[i]); }
五、 思考题或实验感想 小结函数指针、数组指针、字符串指针的使用。 对于指针的使用,最重要的是搞清楚函数指针、数组指针和字符串指针的概念,不能混乱起来。 函数指针变量指向一个函数,然后通过该指针变量调用此函数。函数指针中,函数名代表该函数的入口地址。函数指针只能指向函数的入口而不能指向函数中的某一条指令处,因此不能用*(p+1)表示函数的下一条指令。 数组元素的指针就是数组元素的地址。C语言中规定数组名代表数组中首元素的地址,所以p=&a[0]和p=a等价。p+i,a+i就是a[i]的地址,或者指向数组的第i个元素。*(p+i)或*(a+i)是p+i或a+i所指向的数组元素,即a[i]。指向数组的指针变量可以带有下标,如p[i]与*(p+i)等价。 字符串指针实际上是把字符串的第一个字符赋给指针变量。指针变量只能指向一个字符变量或其他字符型数据,不能同时指向多个字符数据。