收藏 分享(赏)

5 指针.doc

上传人:fmgc7290 文档编号:7756313 上传时间:2019-05-25 格式:DOC 页数:9 大小:83.50KB
下载 相关 举报
5  指针.doc_第1页
第1页 / 共9页
5  指针.doc_第2页
第2页 / 共9页
5  指针.doc_第3页
第3页 / 共9页
5  指针.doc_第4页
第4页 / 共9页
5  指针.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

1、指针 编写一个函数,求一维数组的最大值及其下标、最小值及其下标。 编写一个函数,求三个数的最大值、最小值、它们的平均值。 用字符指针实现字符串的复制、连接、比较(如果 s1s2,输出一个正数;s1=s2,输出一个 0;s1void main()int x=10,y=20;int *p=p=q;printf(“%d %dn“,*p,*q);x=10,y=20;printf(“%d %dn“,x,y);p=q=*p=*q;printf(“%d %dn“,x,y);加减运算,对于指针变量,可以加上或减去一个整数如:pa+n,pa-n,pa+,+pa,pa-,-pa注意,指针向前移动 1 个位置表示指

2、针变量指向下一个数据元素的首地址,而不是在原地址基础上加 1。两个指针变量间的运算只有指向同一类型的两个指针变量才能进行运算。两个指针变量进行关系运算p1=p2,表达式为真,表示 p1 和 p2 指向同一变量;p1p2,表达式为真,表示 p1 处于高地址位置;p1void main()char *p=“abcedfg“;int *q;q=(int*)p;q+;printf(“%s“,q);结果是 cddfg二、指针作为参数例:#includevoid fun(int *x,int *y)*x+=10;*y+=20;void main()int a=6,b=8;fun(printf(“%d %d

3、“,a,b);这样把在被调函数中改变的值带回到主调函数了。若希望通过函数调用改变一个或多个值,可以采用此种方法。从前面的函数调用我们知道,只能传回一个值,用此种方法可以传回多个值了。#includeint fun(int x,int y,int *add,int *div)*add=x+y;*div=x/y;return x-y;void main()int a=6,b=8,xaddy,xdivy,f;f=fun(a,b,printf(“x-y=%d x+y=%d x/y=%dn“,f,xaddy,xdivy);三、指针与数组1、数组的指针表示法1)一维数组#includevoid main(

4、)int a4=1,2,3,4;int *p=a;printf(“%dn“,a3);printf(“%dn“,*(a+3);printf(“%dn“,*(printf(“%dn“,*(printf(“%dn“,*(printf(“%dn“,*(for(int i=0;ivoid main()int a45=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20;int *p=int (*q)5; /这是一个指向有 5 个元素的一维数组的指针/共有四大类表示方法printf(“%dn“,a23);printf(“%dn“,a18);printf(“%

5、dn“,a013);printf(“%dn“,(*(a+2)3);/注意,(*(a+2) 的外括号一定要要printf(“%dn“,*(*(a)+13);printf(“%dn“,*(*(a+1)+8);printf(“%dn“,*(*(a+2)+3);printf(“%dn“,*(*(a+3)-2);printf(“%dn“,*(*(a+4)-7);printf(“%dn“,*(a0+13);printf(“%dn“,*(a1+8);printf(“%dn“,*(a2+3);printf(“%dn“,*(a3-2);printf(“%dn“,*(a4-7);for(int i=0;iint

6、sum(int a,int len)int s=0;for(int i=0;ivoid sum(int a,int len) int s=0;for(int i=0;i#includevoid main()char str1=“abcdef“;char *str2=“abcdef“;char *str3;str3=“abcdef“;char str410;/ str4=“abcdef“;char str510;scanf(“%s“,str5); /改为 gets(str5);char *str6;str6=(char*)malloc(10*sizeof(char);/str6 未初始化,内存空

7、间不能确定。一定要加此句scanf(“%s“,str6); /改成 gets(str6);会怎样?如果输入的字符串中无空格无区别。gets 用回车表示结束。而 scanf 以空格或回车表示结束。printf(“%s %s %s %s %sn“,str1,str2,str3,str5,str6);puts(str1); /用 puts 输出只有一个参数,输出时会自动加上换行符。puts(str2);puts(str3);puts(str5);puts(str6);五、各类指针1、指针数组 如:int *p3;2、指向一维数组(有三个元素)的指针 如:int (*p)3;3、指向指针的指针 如:i

8、nt *p;4、指向函数的指针 如 int (*fun)(int x,int y)#includeint add(int x,int y)return x+y;int max(int x,int y)return xy?x:y;int min(int x,int y)return xvoid main()char name18=“1234567“,“abcdefg“,“ABCDEFG“;/最多只能是 7 个字符,用字符数组处理字符串puts(name10);puts(name11);puts(name12);printf(“name1 %cn“,*(name10+1); /输出某一字符,nam

9、e10是字符串“1234567“的首地址printf(“name1 %cn“,*(name11+2);char *name2=“1234567“,“abcdefg“,“ABCDEFG“; /用指针数组处理字符串puts(name20);puts(name21);puts(name22);printf(“name2 %cn“,*(name20+1); /输出某一字符,name20是字符串“1234567“的首地址printf(“name2 %cn“,*(name21+2);char *name3; /指向字符指针的指针name3=name2; /实际上 name2 就是指向字符指针的指针puts

10、(name30);puts(name31);puts(name32);printf(“name3 %cn“,*(*name3+1); /输出某一字符printf(“name3 %cn“,*(*(name3+1)+2);printf(“%c“,*(*name3+1); /输出某一字符,某一字符的表示方法char (*name5)8;name5=name1; /name1 是指向一个一维数组的指针七、带形式参数的 main 函数#includevoid main(int argc,char *argv)int i;for(i=1;i /没有用函数。#includevoid main()char *

11、str1=“abcde“;char *str2=(char*)malloc(10*sizeof(char);/str2 末初始化,即它指向的对象不确定,且没有相应的内存空间来存放读入的字符串,所以需要为其分配空间。char *p=str1,*q=str2;while(*p)*q=*p;p+;q+;*q=0;printf(“%s“,str2);#include /用函数来实现#includevoid strcopy(char *str1,char *str2) /但函数是用字符指针实现的。 char *p=str1,*q=str2;while(*p)*q=*p;p+;q+;*q=0;void m

12、ain()char s100=“abcde“,t100;/或者 char *s=“abcde“,*t=(char *)malloc(sizeof(char)*100); /考试时,还是用数组的多。strcopy(s,t);printf(“%s“,t);/字符串连接#include#includevoid strcat(char *str1,char *str2) char *p=str1,*q=str2;while(*p)p+;while(*q)*p=*q;p+;q+;*p=0;void main()char s100=“abcde“,t100=“xyz“;/ 在 TC 中可以写成 char *s=”abcde”,*t=”xyz”strcat(s,t);printf(“%s“,s);删除字符串中指定的字符。#includevoid del(char *s1,char ch)char *p;p=s1;while(*p)if(*p!=ch)*s1=*p;s1+;p+;elsep+;*s1=0;void main()char s1=“abcdabcdabcd“; /或 char s1*=”abcdabcdabcd”;,但在 VC 中不能运行。del(s1,c);printf(“%s“,s1);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报