第10章第4节 §104字符串的指针和指向字符串的指针变量 字符串的表示形式 1.用字符数组 maino ichar string[ 14=I love China! 14个元素 printf( %s", string); ove n a )注意输入输出 输出: 输入: 用函数(1) puts(string); 键入 (1)gets(string); I love China! 用s格式 (2) printf%s”, string);(2) scant(“%s3”, string) love China!, 只能输入I (3)for(i=0;i<=13;i++)(3)for(i=0;i<=12;i++) 引用单 stringli]=getchar(; → I love China! 个元素 putchar(stringed) strng|++il=“0 (4)for(i=0;i<=13i++) 4)for(i=0:iK=12;i+ rinf("c", strin;,san“e,srig;→ I love china! scanf“%d”,& strint[13
第10章第4节 §10.4 字符串的指针和指向字符串的指针变量 一. 字符串的表示形式 1 . 用字符数组 main() {char string[14]=“I love China!” printf(“%s”,string); } 1) 注意输入输出 输出: I l o v e C h i n a ! ‘\0’ 14个元素 (1) puts(string); (2) printf(“%s”,string); (3) for(i=0;i<=13;i++) putchar(string[i]); (4) for(i=0;i<=13;i++) printf(“%c”,string[i]); 输入: (1) gets(string); (2) scanf(“%s”,string); (3) for(i=0;i<=12;i++) string[i]=getchar( ); strng[++i]=‘\0’; (4) for(i=0;i<=12;i++) scanf(“%c”,&string[i]); scanf(“%d”,&strint[13]; I love China! I love China! 键入 I love China! I love China! 0 只能输入I 用函数 用s格式 引用单 个元素
第10章第4节 2)字符数组的地址—与数组中地址的概念相似 字符数组名 string→首地址→& cstring|0 元素地址 tring+2 &string 2 元素值 * (string-+2) string 2 2.用字符指针 不定义字符数组,而用指向字符的指针主要用于表示字符串常量 main 0 tchar*string="I love China! 等价于 char *stringa printf((“%s”, string); string=“ Ilove china!” 字符串“ Ilove china!”在内存中仍采用“字符数组”的方式存放,故 string=“ Ilove china!” “ I love china!的首地址(元素的地址)、赋给 指针变量 string 问: 如: string= string+2 结果 printf((“%s”, string love china!
第10章第4节 2) 字符数组的地址——与数组中地址的概念相似 字符数组名 string 首地址 &string[0] 元素地址 string+2 &string[2] 元素值 *(string+2) string[2] 2 . 用字符指针 不定义字符数组,而用指向字符的指针 main() {char *string=“I love China!” printf(“%s”,string); } char *string; string=“I love China!” 字符串“I love China!”在内存中仍采用“字符数组”的方式存放,故: string=“I love China!” “I love China!”的首地址(元素I的地址) 指针变量string 问: 如:string=string+2; printf(“%s”,string); love China! 结果 赋给 等价于 主要用于表示字符串常量
第10章第4节 二.字符串中字符的引用 下标法 指针法(或地址法) 例将字符串a,复制到字符串b中去,不用 strcpy函数 法一:地址法# include“ 'stdio. h” maIn { char a=“ I love china!”,b20 for(i=0;(a+i)=0;i++) b+i)=*(a+i) t(a+)等价于a (b+i)=“0; (b+等价于bi puts(b); 3 法二:指针法 # include“ stdio.h” # include“ stdio. h” maino maIn { char a=“ Ilove china!"”,b|20],*p1,*p2 tchar *pl=l love china!, b[20], *p2; int i. int i. for(p1=a,p2=b;*pl!=“0;p1++,p2++) for(p2=b;*pl!=“0;p1++,p2++) p2=pl; p2=0, p2=0 puts(b); puts(b);
第10章第4节 二. 字符串中字符的引用 下标法 指针法(或地址法) 例 将字符串a, 复制到字符串b中去,不用strcpy函数 法一: 地址法 # include“stdio.h” main() {char a[]=“I love china!”,b[20]; int i; for(i=0; *(a+i)!=‘\0’;i++) *(b+i)=*(a+i); *(b+i)=‘\0’; puts(b);} 法二: 指针法 # include“stdio.h” main() {char a[]=“I love china!”,b[20], *p1,*p2; int i; for(p1=a,p2=b; *p1!=‘\0’;p1++,p2++) *p2=*p1; *p2=‘\0’; puts(b); } # include“stdio.h” main() {char *p1=“I love china!”,b[20],*p2; int i; for(p2=b; *p1!=‘\0’;p1++,p2++) *p2=*p1; *p2=‘\0’; puts(b); } *(a+i) a[i] *(b+i) b[i] 等价于 等价于
第10章第4节 三、用指向字符串的指针作函数参数 1.字符数组名 作函数的参数「与数值型的数组相似 2指向字符串的指针 (形参和实参) 例将字符串a,复制到字符串b中去,不用 strcpy函数 法一:用字符数组名作函数参数 viod fl(char all, char b for(i=0; a:=0; i++) bi=a; bi=“0’; main { char alli=“ Ilove china!”; char b]; fI(a, b); printf((“%s”,b); 法二:用字符指针作函数参数
三. 用指向字符串的指针作函数参数 1.字符数组名 2.指向字符串的指针 作函数的参数 (形参和实参) 例 将字符串a, 复制到字符串b中去,不用strcpy函数 法一:用字符数组名作函数参数 viod f1(char a[], char b[]) {int i; for(i=0;a[i]!=‘\0’; i++) b[i]=a[i]; b[i]=‘\0’; } main() {char a[]=“I love China!”; char b[20]; f1(a,b); printf(“%s”,b); } 法二:用字符指针作函数参数 第10章第4节 与数值型的数组相似
函数的多种写法 第10章第4节 viod fl(char *a, char*b) viod fI(char *a, char *b) fint i; for(i=0;(a+i)!=“0’;i++) for(;*a∴=“10;a++,b++) (b+i)=*(a+i); a, (b+i)=0’; b=“10; 主函数的多种写法 mainO main( { char all=“ ' It is a book”; { char al=“ 't is a book”; char b30 char b[30, pl, "p2; fl(a, b); pI=a; p2=b; printi(“%s”,b); f1(pl, p2); printi(“%s”,p2); maino {char*pl=“ 'It is a b0ok”; maino char b30, *p2; { char *pl=“ It is a book”; char p2=b; fI(pl, p2); n(pl,p2);。。o(有误! printf(%s”,p2); printi(“%s”,p2);
viod f1(char *a, char *b) {int i; for(i=0;*(a+i)!=‘\0’; i++) *(b+i)=*(a+i); *(b+i)=‘\0’; } 函数f1的多种写法 第10章第4节 viod f1(char *a, char *b) { for( ;*a!=‘\0’; a++,b++) *b=*a; *b=‘\0’; } 主函数的多种写法 main() { char a[]=“It is a book”; char b[30]; f1(a,b); printf(“%s”,b); } main() { char a[]=“It is a book”; char b[30],*p1,*p2; p1=a; p2=b; f1(p1,p2); printf(“%s”, p2); } main() { char *p1=“It is a book”; char b[30],*p2; p2=b; f1(p1,p2); printf(“%s”, p2); } main() { char *p1=“It is a book”; char *p2; f1(p1,p2); printf(“%s”, p2); } 有误!!