C语言第13讲指针与字符串(字符数组)

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

业 for(i=0;i<3;i++)
p[ i ]=a[ i ];
p[ 2 ]
大学 *(p[i]+j)=2; /*通过指针数组引用数组元素a[i][j]*/ p[ 3 ]
整理ppt
6
2、用指针数组处理多字符串
WANGJINLING
例:用指针数组对字符串进行排序。
#include <string.h>
6.2.3 指针与字符串(字符数组) ① C语言用字符数组存放字符串。
无名一维字符数 组 ’\0’
▲字符数组:元素个数确定,一般用下标控制循环。
▲字符串:有效字符个数由‘\0’确定,用结束符‘\0’控制循环。
② 字符数组名和字符串的值都是地址(字符串的首地址 )
WANGJINLING
Байду номын сангаас
1、字符串的访问方法:
void main(void )
{ int i, j ;
char *ps[ ] = {"Get", "Put", "Time", "Date"}, *p ;
printf("排序前字符串 :\n");
for(i=0;i<4;i++) puts(ps[i]); for(i=0;i<3;i++)
*/
输出
chp=ch; putchar( *(chp+2));
学 //**通指过针指指针向?引字?用符数数组组元*/ 素*/
printf(“%s,%s”,ch+1,ch整p理+p2pt);
1
例1: 输出字符串
#include<stdio.h> void main()
{ char s[ ]=“computer”, *ps=s ;
char st[80]; st=“Hello” 或:st[ ]=“Hello”
整理ppt
3
例: 统计字符串中的各元音字母的个数(P182 例6.15)
WANGJINLING
#include<stdio.h>
void main(void)
{
char str[80],*p;
int a=0,e=0,i=0,o=0,u=0;
组 母 case 'o': case 'O': o++; break;
元 。 case 'u': case 'U': u++;

}
}
肥 工 业 大
学 printf("a:%3d\ne:%3d\ni:%3d\no:%3d\nu:%3d\n",a,e,i,o,u);
}
整理ppt
4
2. 字符串指针做函数参数(见P183 表6-2) 例: 编写函数,用指针进行字符串的复制,
WANGJINLING
合 ② 性质不同:字符数组名是地址常量,不能改变(指向首字
符); 字符指针是地址变量,可以改变(指向不同的字符)。
③ 赋值方式不同:

字符指针
char *ps=“Hello”;
char *ps;

ps=“Hello”;
业 字符数组
用循环逐个赋值或 用strcpy()函数赋值
× 大学 char st[ ]=“Hello”;
while(*ps!=‘\0’) { putchar(*ps);
ps++; }
printf(“%s”,ps); 或: puts(ps)
··· WANGJINLING
例2:在输入的字}符串中删除指定的字符
main( )
{ char str[80], *p, ch;
int i=0;
ch c
str
str[0] aa str[1] bb
\0
合 2000H 肥 2001H
2002H
工 2003H 业 2004H
2005H
大 2006H
运行程序:
abcdef
c
整理ppt
The new string is: abdef
学 p 2000H 2
▲字符指针(变量)与字符数组的区别
字符指针与字符数组:两者均可存储和运算字符串。
主要区别:
① 存储格式不同: 字符指针变量中存放的是字符串的首地址 (2字节);而字符数组中存放的是整个字符串(一个数组元素 存放一个字符)。
p=str; gets(p); ch=getchar(); for( ; *p!=‘\0’;p++)
i0 str 2000H
str[2] dc ed fe
if(*p!=ch) str[i++]=*p; str[i]=‘\0’;
\0f
printf(“The new string is:%s\n”,str); }
gets(str);
判断字符串是否结束
for(p=str;*p!='\0';p++)
{
循 switch(*p)


{
遍 判 case 'a': case 'A': a++; break;
历 断 case 'e': case 'E': e++; break;
数 字 case 'i': case 'I': i++; break;
WANGJINLING
#include<stdio.h>
void cpystr(char *s1, char *s2)
{ while(*s2!='\0' )
去掉该句,对程
*s1++=*s2++;
序结果是否有
*s1='\0'; }
影响?

void main (void ) { char str1[20],str2[ ]="123456abcdef";

printf("str2: %s\n",str2);

printf("str1: %s\n",str1); cpystr(str1,str2);

printf("str2: %s\n",str2);
printf("str1: %s\n",str1);
}
整理ppt
大 学
5
6.2.4 指针数组
指针是存放其它数据对象地址的变量。也可以构成数组。每 个数组元素均为一个指针变量,且在内存中连续存放。
▲ 直接引用字符串: char *chp;
/*说明字符指针*/

chp=“Hello!”;
/*指针指向字符串*/
puts(chp);
/*通过指针引用字符串*/
字符指针可直接指向字符串:char *chp=“Hello!”;
肥 工
▲ 引用字符数组:

大 char *chp,ch[ ]=”abcde”; /*定义字符指针和字符数组
1. 指针数组定义 格式: type *数组名[元素个数];
WANGJINLING
合 int *p[ 4 ];
定义(说明)p是含有4个元素的指针数组,每个元素都是
一个指向整型变量的指针(二级指针) 。

使用前必须让各元素指向对象。
工 p[ 0 ]
int i, a[3][4], *p[3];
数组名p为数组的首地址。 p[ 1 ]
相关文档
最新文档