电子科技大学乔保军版cc第六节课后答案_第1页
电子科技大学乔保军版cc第六节课后答案_第2页
电子科技大学乔保军版cc第六节课后答案_第3页
电子科技大学乔保军版cc第六节课后答案_第4页
电子科技大学乔保军版cc第六节课后答案_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

1、第六章作业第一题简述指针变量和一般变量的异同答:指针变量和一般变量同时变量其值是可以被改变和赋值的,但是指针变量和一般变量不同的是指针变量里所存放的数据是某个变量的地址而不是宏观上有意义的数字或字符。但是指针变量的使用和一般变量的使用又有一些是相同的,例如可以直接使用“*”号运算符可以对指针所指正的变量直接进行数据操作。例: Int a=3,b=5;Int *p;*p=&a;*p=b; /此处就是将b的值赋给指针p指向的变量 也就是赋给了a(2) 简述指针的自运算特点 答: 指针变量的自运算是指指针的地址运算如p+;p-;-p;+pP+n;p-n;(注:p是指针变量 n为整数)分别指的是对p所

2、指向的地址左移或右移一个单位地址, 和对p所指向的地址左移或右移n个单位地址!单位地址的大小与指针所指向的变量类型有关!例如p所指向的变量得类型为int型变量,如果进行p+运算就是将指针指向p所指向的地址向数值大的方向加4个字节 ,同理若p指向的是 float型则是向地址大的方向加8个字节(3)简述指向函数的指针和返回指针的函数 答:指向函数的指针本身是一个指针 ,因为函数通常都有一个输入接口指向函数的指针就是指向这个函数。 在使用指针的时候会把需要传递的参数通过指针传递给函数 ,从指向函数的指针定义的方法就可以看出来 。 Int (*pf)(int,int) attention:!!指针定义

3、的类型一定要和函数的返回值类型一样才ok 不然会报错哦!-_-#返回指针的函数就是返回值是指针的函数和普通的函数使用方法一样 ,但是在函数的定义时定义的方法如下 Int* fun(int*,int*) 一般返回指针的函数的参数就是指针的类型返回指指针的函数在学习函数的时候就有学到,主要的优势是通过指针的传递在调用外部函数时可以对main函数中的数据直接进行操作,不会像普通函数一样如果不适用static静态局部变量进行声明那么在函数调用结束后函数压进栈里面的数据 也就丢失了!(4) 举例说明如何使用指针访问一维数组答:使用指针访问一维数组 ,因为数组的特性是数组在内存中所占的空间是和它所定义的类

4、型相关的。同时数组内的元素在内存空间中的地址是依次排列出来的,所以使用指针访问数组,可以定义一个指针然后将数组的第一个元素的地址赋值给指针(也就是array【0】)然后可以利用指针的自运通过指针来达到访问呢数组任意数据的目的!例子 :-如下图 (5) 举例如何通过指针访问二维数组元素答:通过指针访问二维数组有两种方法,第一种方法是使用像访问一维数组时的方式定义指针然后将数组的首地址赋值给指针然后通过指针的自运算利用地址的偏移实现对任意数组元素的访问,也可以使用for循环的嵌套实现对数组的行和列的控制进而实现对数组的访遍历;第二种方法就是定义一个数组指针然后使这个指针指向这个数组,利用数组指针的

5、运算达到数组元素的访问。下面是两种方法在vc6.0 IDE下面的代码截图 : 第一种方法:第二种方法:(6) 简述字符数组和字符串指针的异同答:字符数组和字符串指针在定义,和使用以及内存分配方面都有很多的不同;第一 (1)定义的方法不同,字符数组在定义时必须要有数组的长度的分配所以程序员在使用时必须要考虑到实际所要用到的长度,例如要使用有四个字母的字符数组最少要用到5个长度。 (ps:因为字符串后面都要有结束标志字符0)而字符串指针就不存在这个问题,程序员在定义时赋值可以任意的赋值而不需要考虑到内存长度问题。 例:第二 (2)内存分配方法不同,在程序运行时字符串指针是分配在常量区的 ,也就是字

6、符串指针所指向的字符数据在常量区也就是字符串指针在定以赋值后事无法在进行改变了。但是字符数组的空间分配实在栈区的,所以字符数组在定义后是可以多次进行赋值的。但是每个数组在创建时所生成的以数组名定义的指针是一个不可更改值的地址常量(ps:指向数组的第一个元素的地址)这一点一定要区分清楚。第三 (3)后期使用不同,通过上面的内存分配原理我们不难理解在后期的使用中字符数组是可以多次赋值的,但是字符串指针的值是不能改变的!(7)简述指针数组和数组指针的各自特点答:指针数组与数组指针本身属性就是两个不同的概念,指针数组本身就是一个数组,不同的是数组内部的每个元素存储的都是指针的类型。但是数组指针本身却是

7、个指针,只是这个指针的指向有点特殊,它每次指向的都是二维数组的行首地址和每行的地址偏移量所以叫他数组指针。指针数组的特点是数组内部的每个元素都是数组类型 这样我们就利用了数组对数据的组织的方便性结合指针的高效性和方便性,从而对数据的更方便的管理和访问及使用数组指针的特点是快捷的访问数组而且通过数组指针我们可以直接对数组指针进行数组下标的访问,这在指向数组的指针中是难以实现的例 Int array23;Int *p;Int *p2;p=&array0;Printf(“%d”,p12); /此时是违法的!p2=array;Printf(“%d”,p12); /此时是可以使用的!(8) 如何使用指针

8、访问结构变量答:使用指针访问结构体变量,首先定义一个指向结构体变量的指针,定义指向结构体变量的指针的方法如下Struct 结构体名,*p指针变量名;定义好指向结构体的指针后还要对他进行赋值 例:Struct student stu,*p;P=&stu;赋值后就可以通过指针访问结构体中的成员变量了!访问方式有两种,使用.运算符访问成员变量 例 (*p).成员变量名;(2) 使用-运算符访问成员变量 例 P-成员变量名;(9) 举例说明如何使用viod指针进行强制类型转换答:viod指针用来指向一个抽象的数据,在将它值赋值给另一个指针变量时要进行强制的类型转换使之适合与被赋值的变量的数据类型。 例

9、 Char *p1;Void *p2;P1=(char *)p2; 或P2=(void *)p1;第二题编写函数fun(int *p,int* lin,int* col),功能是查找二维数组中的最大值,并返回最大值所在的行列号答:源代码和运行截图如下 #include #include int fun(int* p,int* lin,int* col);int main()int array23=1,9,6,4,5,2;int lin=0,col=0;int max;max=fun(&array00,&lin,&col);printf(数组中最大的数据是%d n它在第%d行 n它在第%d列n,

10、max,lin,col);system(pause);return 0;int fun(int* p,int* lin,int* col)int i,j;int max;max=*p;for(i=0;i2;i+)for(j=0;j3;j+)if(max*(p+(3*i+j)max=*(p+(3*i+j);*lin=i+1;*col=j+1;return max;编写函数fun(char *s),功能是统计字符串中字符的个数答:源代码和运行截图如下 #include #include int fun (char *s);int main()char *s=fjashgfjgfjlsagfjkgf

11、juisha; /此处乱敲!int result=0;result=fun(s);printf(字符串s中共有字符%d个n,result);system(pause);return 0;int fun (char *s)int result=0;while(*s)result+;s+;return result;编写函数fun(char *s),功能是把字符串中的内容逆置答:源代码和运行截图如下 #include #include void fun(char *s);int main()char array10;printf(请输入十个字母数据我们将试着逆置他们n);gets(array);p

12、rintf(您输入的数据为%sn,&array);fun(&array0);printf(逆置后的数据为%sn,&array);system(pause);return 0;void fun(char *s)int i;char temp;for(i=0;i5;i+)temp=*(s+9-i);*(s+9-i)=*(s+i);*(s+i)=temp;编写函数fun(char *s1,char *s2),功能是把字符串s2中的内容复制到字符串s1中答:源代码和运行截图如下 #include #include void fun(char *s1,char* s2);int main()printf

13、(请输入两段字符串我们将会把字符串2的数据复制到字符串1中n);printf(请输入第一段字符串请输入十个字符n);char array11;char array211;gets(array);printf(您输入的第一段字符串为:%sn,array);printf(请输入第二段字符串请输入十个字符n);gets(array2);printf(您输入的第一段字符串为:%sn,array2);fun(&array0,&array20);printf(复制后的数据为n);printf(第一个字符串为%sn,array);printf(第二个字符串为%sn,array2);system(pause);return 0;void fun(char *s1,char* s2)int i=0;for(i;i10;i+)*(s1+i)=*(s2+i);编写函数fun(char *s1,char *s2),功能是把字符串s2的内容链接到字符串s1的后面答:源代码和运行截图如下 #include #include void fun(char* s1,char* s2);int main()printf(请您输入两段字符串 我们将首尾链接他们n);char array21;char array211;printf(请您输入十个字母或

温馨提示

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

评论

0/150

提交评论