第四章简单构造数据类型.ppt

上传人:sccc 文档编号:6003899 上传时间:2023-09-13 格式:PPT 页数:70 大小:589.04KB
返回 下载 相关 举报
第四章简单构造数据类型.ppt_第1页
第1页 / 共70页
第四章简单构造数据类型.ppt_第2页
第2页 / 共70页
第四章简单构造数据类型.ppt_第3页
第3页 / 共70页
第四章简单构造数据类型.ppt_第4页
第4页 / 共70页
第四章简单构造数据类型.ppt_第5页
第5页 / 共70页
点击查看更多>>
资源描述

《第四章简单构造数据类型.ppt》由会员分享,可在线阅读,更多相关《第四章简单构造数据类型.ppt(70页珍藏版)》请在三一办公上搜索。

1、2023/9/13,C语言程序设计,1,第四章 简单构造数据类型,前面的章节中我们已经学习了C语言中的一些基本数据类型(整型、字符型、实型),从本章开始我们学习构造类型的数据:数组类型、结构体类型、共同体类型,枚举类型。,4.1 一维数组4.2 二维数组4.3 字符数组与字符串4.4 数组与指针4.5 字符串与指针4.6 典型例题,2023/9/13,C语言程序设计,2,4.1一维数组4.1.1 一维数组的引出,例4.1:编写一个函数,从键盘读如10个数,返回最大数,在主函数中输出最大数。,#includeint max()float x,n,p;printf(“input 10 number

2、s:n”);scanf(“%f”,void main()printf(“max=%dn”,max();,2023/9/13,C语言程序设计,3,改进4.1_1:要求在主函数中读入10个数。,2023/9/13,C语言程序设计,4,上节回顾,(1)指针变量(2)变量的指针(3)int a=4,*s;s=则,*s=?(4)值传递方式 vs 地址传递方式,就是存放变量地址的变量。,就是变量的地址。,4,#includevoid swap(int*px,int*py)int temp;temp=*px;*px=*py;*py=temp;void main()int x=7,y=11,*p1,*p2;p

3、1=,2023/9/13,C语言程序设计,5,上节回顾,1、数组:2、数组定义:3、数组的引用:4、数组的初始化:5、冒泡排序:,是指一个有序数据的集合,其中每个元素由统一的数组名和下标来唯一的表示。,定义形式:类型说明符 数组名常量表达式,引用形式:数组名下标,如:int a5=1,3,5,7,9;,2023/9/13,C语言程序设计,6,1、所谓的数组是指一个有序数据的集合,其中每个元素由统一的数组名和下标来唯一的表示。,2、定义形式:类型说明符 数组名常量表达式 如:int a5;表示一个含有5个整型元素的数组,其中a是数组名,元素是a0,a1,a2,a3,a4。,4.1.2一维数组的定

4、义和引用,2023/9/13,C语言程序设计,7,【说明】:、数组名由用户定义,定义规则和变量名相同,、常量表达式表示数组的元素个数,即数组长度。常量表达式中可以包括常量和符号常量,不能包含变量。、数组的下标从0开始。、和其他变量一样,数组也必须先定义后使用。,2023/9/13,C语言程序设计,8,判断一下数组表达方式正误?,int a(10);数组a10中包括元素:a0,a1,a9,a10int n;scanf(“%d”,(),(),(),(),2023/9/13,C语言程序设计,9,3、一维数组的引用,引用形式:数组名下标,注意:数组元素的下标可以是整型常量或整型表达式;C语言规定只能逐

5、个引用数组元素而不能一次引用整个数组;对下标的引用不要超过下标的最大值。,例:int x10,n;for(n=0;n10;n+)scanf(“%d”,4、一维数组的初始化(1)概念:在定义一维数组时对各元素指定初始值称为 数组的初始化,如:int a5=1,3,5,7,9;,(2)方法:1)、在数组定义的同时对全体数组元素初始化。(可以省略数组长度)如:int a=1,2,3,4,5;2)、可以仅对一部分下标元素赋初值。(不能省略数组长度)如:int a5=1,2,3,则;a0=a1=a2=a3=a4=,1,2,0,0,3,2023/9/13,C语言程序设计,11,3)、如果不对某些下标元素赋

6、初值,则对数值型元素均为0,对字符型元素均为空操作符0.4)、如果想对所有的元素全部赋初值,可以省略定义元素个数。如:int a=1,2,3,4,5;5)、如果使数组所有元素值为0,可以:int a10=0,0,0,0,0,0,0,0,0,0;或 int a10=0;,经典例题4.2:用冒泡排序法对6个数进行排序(从小到大),a0a1a2a3a4a5,2,7,7,5,4,7,1,4,5,1,5,1,4,1,2,冒泡排序方法:依次比较相邻的两个数,将小数放前面,大数放后面.n个数排序需要进行n-1轮比较,从第1轮到第n-1轮,各轮的比较次数依次为:n-1次、n-2次 1次,9,9,9,9,9,7

7、,2,5,4,1,初始状态,第1轮,第2轮,第3轮,第4轮,第5轮,7,4.1.3一维数组程序举例,2023/9/13,C语言程序设计,13,#include void main()int a6,i,j,t;for(i=0;iaj+1)t=aj;aj=aj+1;aj+1=t;for(i=0;i6;i+)printf(“%3d”,ai);,输入6个数据,用嵌套的for循环实现排序外层循环控制进行6-1轮比较内层循环控制第i轮进行6-i次比较,若前面的数大于后面的数,则进行交换,输出排序后的6个数据,2023/9/13,C语言程序设计,14,a0a1a2a3a4a5,第1轮,第2轮,第3轮,第4轮

8、,第5轮,从这道例题中我们发现,在进行完第二轮比较后,实际上排序已经完成了,从第三轮开始,后面的比较都是多余的,在这种情况下我们希望可以终止比较.,初始状态,为了解决问题,我们在程序中设置一个变量flag,用它记录在一轮比较中是否进行了交换在每轮比较开始前flag=0,如果在此轮比较中进行了交换,则flag=1,在一轮比较结束后,判断flag的值是否为1,如果值为0,说明在此轮比较中没有进行交换(即已经完成排序了),此时可以终止循环(即结束排序)如果flag的值为1,则要继续进行排序,#include void main()int a6,i,j,t,flag;for(i=0;iaj+1)t=a

9、j;aj=aj+1;aj+1=t;flag=1;i+;while(flag);for(i=0;i6;i+)printf(“%3d”,ai);,2023/9/13,C语言程序设计,16,例4.3 用数组处理Fibonacci数列问题,输出20以内的所有项的值。,#include void main()int f20=1,1;int i;for(i=2;i20;i+)fi=fi-2+fi-1;for(i=0;i20;i+)if(i%5=0)printf(n);/*if语句用来控制换行,每行输出5个数据。*/printf(%-12d,fi);printf(n);,2023/9/13,C语言程序设计,

10、17,例4.4:假设考试共有4个科目,一个班有3名学生。输入所有学生的各科成绩,求出每名学生的总成绩。,4.2、二维数组的定义和引用4.2.1 二维数组的引出,2023/9/13,C语言程序设计,18,1、概念:一个一维数组,它的每一个元素都是类型相同的一维数组,就形成一个二维数组,2、定义形式:类型标识符 数组名 常量表达式1 常量表达式2 如:int a34;,a0a1a2,4.2.2 二维数组的定义和使用,2023/9/13,C语言程序设计,19,3、存储形式:数组的元素在内存中是连续存放的 例 int a33;的存放形式如下:,a10a11a12,a20a21a22,a00a01a02

11、,a00a01a02a10a11a12a20a21a22,101010121014101610181020102210241026,2023/9/13,C语言程序设计,20,4、二维数组元素的引用,二维数组元素的表示:数组名下标下标,2023/9/13,C语言程序设计,21,(1).分行初始化 int a34=1,2,3,4,5,6,7,8,9,10,11,12;此方法较直观,第一对 内的数据赋给 第一行数组元素,以此类推,(2).按数据的排列顺序对数组元素赋初值 int a34=1,2,3,4,5,6,7,8,9,10,11,12 将数据依次赋给元素 a00,a01 a23,注意:此方法数据

12、没有明显的界限,当数据较多时容易出错,5.二维数组的初始化,2023/9/13,C语言程序设计,22,(3).对数组的部分元素赋初值 int a34=1,2,3,0,4;,int a34=1,2,3,4,5,6;,(4).对数组的全部元素赋初值时可以省略第一维的长度 系统会根据数据的个数和第二维的长度自动求出 第一维的长度 int a 4=1,2,0,3,4,5;int b 2=1,2,3,4,5,6,7,8;,数组a 第一维长度为 3,数组b 第一维长度为 4,4.2.3 二维数组程序举例,#include#define M 3/*定义符号常量M,代表学生总人数*/#define N 4/*

13、定义符号常量N,代表5个考试科目*/void main()float score205,sum20;int i,j;printf(Input%d students%d scores(score%d%d):n,M,N,M,N);for(i=0;iM;i+)sumi=0;/*第i个学生的总成绩初值0*/for(j=0;jN;j+)printf(input%dth student%dth score:,i+1,j+1);scanf(%f,/*输出第i个学生的总成绩*/,例4.4,2023/9/13,C语言程序设计,24,#includevoid main()int a23=1,2,3,4,5,6;i

14、nt b32,i,j;printf(array a:n);for(i=0;i=1;i+)for(j=0;j=2;j+)printf(%5d,aij);bji=aij;printf(n);,printf(array b:n);for(i=0;i=2;i+)for(j=0;j=1;j+)printf(%5d,bij);printf(n);,2023/9/13,C语言程序设计,26,上节回顾,1、二维数组的定义2、二维数组的引用3、二维数组的初始化,类型标识符 数组名 常量表达式1 常量表达式2 如:int a34;,数组名下标下标,(1).分行初始化(2).按数据的排列顺序对数组元素赋初值,202

15、3/9/13,C语言程序设计,27,4.3 字符数组 4.3.1 字符数组的引出,一、引入 思考:怎样表达 Tom,China,ISBN等?,二、定义字符串:由若干有效字符组成的字符序列;字符串必须以0作为结束标志,它只是表示一个字符串的结束,没有任何的具体含义。,C语言中的字符串是作为字符数组来处理的。,2023/9/13,C语言程序设计,28,4.3.2 字符数组的定义和引用,1.字符数组定义:用来存放字符型数据的数组称为字符数组。例:char c10;,2.字符数组的初始化:(1)可以逐个字符元素赋值;例:char 5=C,h,i,n,a;(2)当初值个数小于字符数组长度时,其余元素自动

16、赋值为0;例:char10=B,e,i,J,i,n,g;则:str7=str8=str9=0;,2023/9/13,C语言程序设计,29,(3)当初值个数大于数组长度,按语法错误处理;(4)当初值个数与预定的数组长度相同时,可以省略数组长度;例:char c=C,h,i,n,a;(5)也可以定义和初始化一个二位字符数组。例:char diamond33=,*,*,*,*,*,2023/9/13,C语言程序设计,30,3.字符数组的引用:引用字符数组中的一个元素,可以得到一个字符。,例4.6:/*输出一个字符串*/#include void main()static char c10=I,a,m

17、,a,s,t,u,d,e,n,t;int i;for(i=0;i10;i+)printf(%c,ci);printf(n);运行结果为:I am a student,2023/9/13,C语言程序设计,31,1.字符串的定义:由若干个有效字符组成的序列,用双引号括起来。有效字符包括字母,数字,专用字符,转义字符 如:“bfer”“a45-7”“mtkn”,C语言中没有专门的字符串变量,因此字符串存放在字符数组中,字符串以“0”作为结束标志,说明:定义字符数组时,要保证数组长度始终大于字符串实际长度。例:字符串“How are you”在内存中实际占12个字符。,4.3.3 字符串的定义和引用,

18、2023/9/13,C语言程序设计,32,2、字符数组的初始化:初始化形式:(1)数据类型 数组名=字符串;或(2)数据类型 数组名=字符串;如:char aa=”good morning!”;则数组aa的长度为14而不是13。由系统在字符串后加一个0。以上字符串赋值相当于:char aa=“good morning!”;或 char aa=g,o,o,d,m,o,r,n,i,n,g,!,0;,(1).为数组中的元素指定初值 char c8=H,e,l,l,o;,如果对数组全部元素指定初值,则可以省略数组的长度char c=H,e,l,l,o;,(2).对字符数组指定字符串初值,char c8

19、=“Hello”;char c8=“Hello”;char c8=H,e,l,l,o,0;,char c=“Hello”;,char c6=“Hello”;,char c5=“Hello”;,错误的初始化,注意:初始化时数组的长度应足够大,确保可以容纳所有字符和结束标志0,3、字符串的输入(1).输入单个字符 char c8;int i;scanf(“%c%c%c”,for(i=3;i8;i+)scanf(“%c”,(2).输入一个字符串 scanf(“%s”,c);说明:用格式字符%s 输入字符串,字符数组变量c不需要 加地址运算符&,因数组名本身代表数组的首地址,注意:(1)从键盘输入字符

20、串时不加“”(2)用scanf 输入字符串时,空格和回车符都会作为 字符串的分隔符,即scanf不能用来输入包含有 空格的字符串,(3).字符串输入函数 gets(字符数组)如:gets(c);,说明:输入有空格的字符串时应使用函数gets,它会读入全部字符直到遇到回车符为止,例:int i;char c8;for(i=0;i8;i+)scanf(“%c”,假设输入为:abcd efgh,注意:用gets输入字符串时,若输入字符数目大于字符数组的长度,多出的字符则会存放在数组的合法存储空间之外,实际编程不建议这样做,多出字符较多时执行会出错。,2023/9/13,C语言程序设计,36,4、字符

21、串的输出(1).输出单个字符,char c8;int i;printf(“%c%c”,c0,c1);for(i=2;i8;i+)printf(“%c”,ci);,(2).输出字符串 printf(“%s”,c);,注意:输出时不包括字符0,如果一个字符串中有多个0 则输出时遇到第一个0即认为字符串结束,(3).字符串输出函数 puts(字符数组)一次输出一个字符串,输出时将0自动转换成换行符,例:char s15=“abc”,s210=“defg”;printf(“%s%sn”,s1,s2);puts(s1);puts(s2);,输出结果:abcdefgabcdefg,例:int i;char

22、 c8;gets(c);for(i=0;i8;i+)printf(“%c”,ci);printf(“n”)puts(c);printf(“%s”,c);,假设输入为:abcd efgh,输出结果:abcd efgabcd efghabcd efgh,2023/9/13,C语言程序设计,38,4、字符串数组,字符串数组就是数组中的每一个元素是一个字符串。实际上是一个二维字符数组。该二维字符数组的第一维表示字符串的个数,第二维表示每个字符串的存储的长度。,例:char str510;,字符串处理函数(使用字符串函数时要写#include)(1).字符串拷贝函数 注意:C语言不允许用赋值表达式对字符

23、数组赋值 char s15=“abc”,s23,s38;s2=“abc”;s3=s1;,/*赋值与初始化不同*/,/*对s2,s3 的赋值都是非法的*/,希望字符数组s2或s3中也存放字符串“abc”不能用赋值而要用字符串拷贝函数,格式:strcpy(字符数组变量1,字符串2)作用:将字符串2中的字符复制到字符数组1中 说明:字符数组1 必须足够大 字符串可以是字符串常量,也可以是字符数组变量 拷贝时0也一起拷贝,6、字符串处理函数,2023/9/13,C语言程序设计,40,例:char s15=“abc”,s23,s38;strcpy(s3,s1);strcpy(s2,s1);,s1,s3,

24、s2,函数strncpy(字符数组1,字符串2,n)作用:将字符串2的前n个字符复制到字符数组1 中例:char c110,c2=“abcdef”;strncpy(c1,c2,3);,c1,c2,a b c,(2).字符串连接函数a)格式:strcat(字符数组变量1,字符串2)b)作用:将字符串2中的字符连接到字符串1 的后面,产生的 新字符串仍存放在字符数组1 中 c)说明:连接时将字符串1 末尾的0将去掉,而在连接后的 新字符串末尾添加0 注意:字符数组1要足够大,例:char s110=“abc”,s2=“def”;strcat(s1,s2);strcat(s1,“gh”);,s1,s

25、2,d,e,f,0,g,h,0,2023/9/13,C语言程序设计,42,(3).字符串比较函数 a)格式:strcmp(字符串1,字符串2)b)作用:比较两个字符串的大小c)说明:两个字符串可能是字符串常量或字符数组变量 两个字符串比较时,从字符串中的第一个字符开始逐个 比较其ASCII码值,直到出现不同字符或出现0为止 比较的结果由函数值带回,str1=str2 函数值为0str1 str2 函数值为正数str1 str2 函数值为负数,2023/9/13,C语言程序设计,43,(4).测字符串长度函数 格式:strlen(字符串)作用:测出字符串中实际字符的个数(不包括0),例:int

26、len1,len2;char s10;len1=strlen(“computer”);gets(s);len2=strlen(s);,(5).字符串中大、小字母转换 strlwr(字符串)将字符串中大写字母换成小写字母 strupr(字符串)将字符串中小写字母换成大写字母,2023/9/13,C语言程序设计,44,例4.7:用循环求从键盘输入的字符个数。#include#define MAX 80main()char aMAX;int i=0;printf(“Input a string:);scanf(%s,a);do i=i+1;while(ai!=0);printf(%d,i);,本例在

27、进行输入时,因为数组名本身就代表地址,故不使用求地址运算符。因为在输入字符串时,自动加上一个结束符0,以此来判断字符串是否结 束。,4.3.4 字符串程序举例,教材例4.9,4.10 自学,2023/9/13,C语言程序设计,45,上节回顾,1、字符串的输入/输出2、(1)字符串拷贝函数(2)字符串连接函数(3)字符串比较函数(4)求字符串长度(5)全部转化为大(小)写,puts(字符数组)gets(字符数组)%s,#include strcpy(字符数组变量1,字符串2)strncpy(字符数组1,字符串2,n),strcat(字符数组变量1,字符串2),strlen(字符串),strlwr

28、(字符串)strlpr(字符串),strcmp(字符串1,字符串2),2023/9/13,C语言程序设计,46,4.4 数组与指针4.4.1 一维数组与指针,一、指向数组元素的指针 与指向变量的指针用法相同。,二、指向数组的指针 就是将数组的首地址赋值给指针变量。,例:int a10;int*p;p=,数组名就代表数组的首地址,2023/9/13,C语言程序设计,47,指针变量加法:指针和整数进行加减运算是按地址的运算规则进行的。例:p=p+n;p=p-n;,则,指针变量p的值按以下公式计算:p的新值=p的旧值+/-n*sizeof(指针基类型)即,一个指针变量加或减n后,相当于把指针变量的指

29、向向后或向前移动了n个基类型单元。,2023/9/13,C语言程序设计,48,三、通过指针引用数组元素 a中的第i+1个元素可以表示为:(1)ai;(2)*(p+i),2023/9/13,C语言程序设计,49,注意:1、可以改变指针变量的值,但是指针常量不可以改变!p+合法,但是a+不合法(a是数组名,是指针常量)2、要注意指针变量的当前值;3、使用指针变量指向数组元素时,要保证指向有效元素;4、注意指针变量的运算;p+是p指向下一个元素*p+等价于*(p+)*(p+)和*(+p)不同(*p)+是p指向的元素加1,xi等价于*(x+i)&xi等价于x+i,2023/9/13,C语言程序设计,5

30、0,例4.8:一个数组含有10个学生的成绩,编写程序输出所有学生的成绩,以及最高分和最低分。,#includevoid main()int score10,*p=,2023/9/13,C语言程序设计,51,4.4.2 多维数组与指针(自学),一、多维数组元素的地址 设一个数组定义为:int a34,其中,a表示数组的首地址,即&a00。,a+0,a+1,a+2,ai等价于*(a+i),aij 等价于*(*(a+i)+j),2023/9/13,C语言程序设计,52,二、指向多维数组元素的指针变量 指向一个有m个元素组成的一维数组的指针变量的定义为:类型名(*指针变量名)长度,例:int(*pa)

31、4;pa是指针变量,他指向一个包含4个元素的一维数组。,注意:该定义与定义int*pa;和 int*pa4;不同。,思考:如果执行pa+,则pa实际怎家了多少?,2023/9/13,C语言程序设计,53,4.4.3 数组作为函数参数,一、数组元素作为函数参数 与一般变量作函数参数是一样的,是“值传递”。,二、数组名作函数参数 注意:数组名就是数组的首地址!是“地址传递”。,2023/9/13,C语言程序设计,54,数组作函数参数总结,f(int z,int n)main()int a10;f(a,10);,(1)(2)(3)(4),f(int z,int n)main()int a10,*p;

32、p=a;f(p,10);,f(int*x,int n)main()int a10;f(a,10);,f(int*x,int n)main()int a10,*p;p=a;f(p,10);,#includevoid paixu(int x10)int m,n,flag,t;for(m=0;mxn+1)t=xn;xn=xn+1;xn+1=t;flag=1;if(flag=0)break;void main()int a10,i;printf(“Input 10 integers:n”);for(i=0;i10;i+)scanf(“%d”,例如4.9_1:冒泡排序,#include void pai

33、xu(int x,int y)int m,n,flag,t;for(m=0;mxn+1)t=xn;xn=xn+1;xn+1=t;flag=1;if(flag=0)break;void main()int a10,i;printf(“Input 10 integers:n”);for(i=0;i10;i+)scanf(“%d”,例如4.9_2:冒泡排序,#include void paixu(int*x,int y)int m,n,flag,t;for(m=0;m*(x+n+1)t=*(x+n);*(x+n)=*(x+n+1);*(x+n+1)=t;flag=1;if(flag=0)break;

34、void main()int a10,i;printf(“Input 10 integers:n”);for(i=0;i10;i+)scanf(“%d”,例如4.9_3:冒泡排序,等价于:if(xnxn+1)t=xn;xn=xn+1;xn+1=t;flag=1;,2023/9/13,C语言程序设计,58,例如4.10:将数组a中的n歌数按相反顺序存放,#include void inv(int x,int n);void main()int a10=3,7,9,11,0,6,7,5,4,2;int i;printf(the original array:n);for(i=0;i10;i+)pr

35、intf(%d,ai);inv(a,10);printf(nthe array has been inverted:n);for(i=0;i10;i+)printf(%d,ai);printf(n);,2023/9/13,C语言程序设计,59,void inv(int x,int n)int temp,i,m;m=(n-1)/2;for(i=0;i=m;i+)temp=xi;xi=x9-i;x9-i=temp;,数组作形参,指针作形参(一),void inv(int*x,int n)int i,m,temp;m=(n-1)/2;for(i=0;i=m;i+)temp=*(x+i);*(x+i)

36、=*(x+9-i);*(x+9-i)=temp;,2023/9/13,C语言程序设计,60,指针作形参(二),void inv(int*x,int n)int*p,*i,*j,temp,m=(n-1)/2;i=x;j=x+n-1;p=x+m;for(;i=p;i+,j-)temp=*i;*i=*j;*j=temp;,2023/9/13,C语言程序设计,61,三、多维数组作函数参数(自学),多维数组名也是数组的首地址,因此也是“地址传递”。,例如:求4*5矩阵中最小元素及其行号和列号。int min(int a45,int*r,int*c)int mina,m,n;mina=a00;for(m=

37、0;mamn)mina=amn;*r=m;*c=n;return(mina);,main()int x45,p,q,minx,row,colum,;for(p=0;p4;p+)for(q=0;q5;q+)scanf(“%d”,2023/9/13,C语言程序设计,62,例1:用字符指针指向一个字符串 char*s=“I love China!”;printf(“%sn”,s);,4.5字符串与指针,字符串指针一般形式:char*字符串指针变量名,I love China!0,S,比较:用字符数组存放字符串char s=“I love China!”;printf(“%sn”,s);,I love

38、 China!0,S0,S13,2023/9/13,C语言程序设计,63,(2)指针法:#includevoid main()char a=“Hello,World!”,b20;char*pa=a;*pb=b;for(;*pa!=0;pa+,pb+)*pb=*pa;*pb=0;puts(b);,例2:用字符串指针访问字符串,(1)下标法#includevoid main()char a=“Hello,World!”,b20;int i;for(i=0;ai!=0;i+)bi=ai;bi=0;puts(b);,2023/9/13,C语言程序设计,64,字符指针和字符数组的区别,1、字符数组由若干

39、个元素组成,每个元素中存放着一个字符;而字符指针变量中存放的是地址,不是将字符串放到字符指针变量中。,2、赋值方式:(1)对于字符数组只能对各个元素赋值。char str20;str20=I love China!;(是错误的)(2)而对于字符指针可进行整体赋值:char*ps;ps=I love China!;,2023/9/13,C语言程序设计,65,3、对字符指针变量赋初值:(1)char*s=I love China!;等价于:char*s;s=I love China!;(2)char str=I love China!;等价于:char str14;strcpy(str,I lov

40、e China!);,字符指针和字符数组的区别(续),2023/9/13,C语言程序设计,66,字符指针和字符数组的区别(续),4、如果定义了一个字符数组,在编译时为它分配内存单元,它有确定的地址。而定义一个字符指针变量时,给指针变量分配内存单元,在其中可以放一个地址,也就是说,该指针变量指向一个字符型数据,但如果未对它赋予一个地址值,则它并未具体指向一个确定的字符数据。例如:char str10;scanf(“%s”,str);以下的定义与输入是错误的:char*a;scanf(“%s”,a);,char*a,str10;a=str;scanf(“%s”,a);,2023/9/13,C语言程

41、序设计,67,字符指针和字符数组的区别(续),5、指针变量的值是可以改变的。#includevoid main()char*a=I love china!;a=a+7;printf(“%s”,a);,输出:china!,2023/9/13,C语言程序设计,68,例4.10:用函数调用实现字符串的复制(1)字符数组作函数参数#include void copy_str(char to,char from)int m=0;while(fromm!=0)tom=fromm;m+;tom=0;void main()char a=“abcdefg”;char b=“12345”;copy_str(a,b);puts(a);,2023/9/13,C语言程序设计,69,形参用字符指针变量#include void copu_str(char*to,char*from)for(;*from!=0;from+,to+)*to=*from;*to=0;void main()char*a=“abcdefg”;char*b=“12345”;copy_str(a,b);puts(a);,2023/9/13,C语言程序设计,70,小结,本章主要内容:一维数组二维数组字符数组数组元素/数组作函数参数使用指针引用数组元素字符串指针,

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号