c语言数组章节总结,C语言第八章地址和数组总结

41528d3028836879cd698677c3999917.gifC语言第八章地址和数组总结

第八章地址和数组总结 基本知识点: 一、 指向字符串的指针变量 格式(1) char *变量名=字符串常量; 格式(2) char *变量名; 变量名=字符串常量; 例:char *pr=“I love China“; 例将字符串a复制到字符串b中。 main () {char a[]=“I am a boy.“; char b[20]; /* 定义数组b的大小不能小于数组a的长度 */ int i; for(i=0;*(a+i)!= \0 ;i++) /* 当字符数组a不结束时,执行循环体 */ *(b+i)=*(a+i); /* 将字符数组a中的字符赋给字符数组b的对应元素 */ *(b+i)= \0 ; /* 在数组b的最后放入字符串结束的标志 \0 */ printf(“string a is: %s\n“,a); printf(“string b is: %s\n“,b); } 二、字符串的表现形式 1. 用字符数组实现 如: main() {static char str[]=“I love China!“; printf(“%s\n“,str); } 该程序运行结果为: I love China! 在这个程序中,定义了一个字符数组str,将字符串常量中的各个字符(包括空字符)依次赋给str的各个元素.调用printf函数,以%s格式整体输出字符数组。 2. 用指向字符串的指针实现。如: main() {char *p; p=“I love China!“; printf(“%s\n“,p); } 程序运行结果同上. 三、字符数组和指向字符指针的几个不同点: (1)功能不同:字符数组名是数组的首地址,是常量,不能进行自加自减运算,只能进行加减运算;字符指针是变量,可以进行自加自减运算。 (2)初始化意义不同:初始化时对字符数组整体赋值,是将一个字符串中的各个字符依次赋给字符数组的各个元素;初始化时对指针变量赋值是将一个字符串的首地址赋给指针变量。 (3)赋值方法不同:对字符数组的整体赋值(初始化除外)必须使用strcpy函数或用scanf()函数的%s格式;对字符指针除了使用这两个函数之外,还可以直接用赋值语句赋值。 (4)定义一个指向字符型数据的指针变量,系统给指针变量分配存储单元,但如果不给该指针变量赋地址值,则它不能指向某一确定的字符型数据;定义一个字符数组,则系统就会给数组分配存储单元,无论该字符数组是否被赋初值。 四、字符串指针作函数参数: 利用字符数组名或指向字符数组的指针变量都可以将一个字符串从一个函数传递到另外一个函数中,有下列几种方法: 1. 形参和实参均为数组; 2. 形参为数组,实参为指针变量:在主调函数中应当定义指向字符型数据的指针变量,并令其指向字符串(即将字符串的首地址赋给指针变量),用这样的指针变量作函数的实参; 3. 形参为指针变量,实参为数组; 4. 形参实参均为指针变量:在主调函数中应当定义指向字符型数据的指针变量并令其指向字符串(即将字符串的首地址赋给指针变量),用这样的指针变量作函数的实参.形参应为指向字符型数据的指针变量。 五、指向函数的指针变量的定义 1. 格式 类型标识符 (*指针变量名)(); 如: float (*p)(); 则表示定义p为指针变量,但只能指向单精度型的函数,而不能指向其它任何数据类型。 六、用指向函数的指针变量作函数的参数: 用指向函数的指针变量的调用函数时首先要将函数的入口地址赋给指针变量(即使指针变量指向函数),然后(*指针变量名)就可以取代函数名使用。 七、返回指针的函数的定义: 1. 格式: 类型标识符 *函数名(参数表);即在一般函数的定义中在函数名前加一个*。如::int *a(m,n) 表示a是一个函数,带二个形参m和n,均为整型变量,函数的返回值是一个指向整型数据的指针。 应用 1、已知:int *p, a;则语句”p=”中的运算符“表明将变量a 的地址赋与指针p,因此,正确答案为[D]。 2、设已有定义:float x;则以下对指针变量p进行定义且赋初值的语句中正确的是( )。(全国计算机二级考试题2007年4月) [A]float *p=1024; [B]int *p=(float x); [C]float p= [D]float *P= 解析:本题考查的是指针变量的定义及初始化问题。指针就是地址,应将地址常量(指针常量)赋与指针变量。因此,正确答案为[D]。 3、若有定义语句:double x[5]={1.0, 2.0, 3.0, 4.0, 5.0},*p=x; 则错误引用x数组元素的是( )。(全国计算机二级考试题2008年9月) [A]*p [B]x[5] [C]*(p+1) [D]*x 解析:本题考查的是数组的下标是否越界,以及通过指针引用变量的问题。选项B中x[5],下标越界。一维数组名是地址常量(数组首地址),始终指向第一个数组元素,进行赋值p=x,指针变量p也指向第一个数组元素如下图: 选项A中 *p表示p所指向单元的数据即x[0] 值为1.0,选项C中 *(p+1)表示p+1所指向单元的数据即x[1] 值为2.0,选项D中 *x表示x所指向单元的数据即x[0] 值为1.0。因此,正确答案为[B]。 4、有以下程序 #include “stdio.h” void main() { int a[ ]={1,2,3,4},y,*p= --p; y=*p; printf(“y=%d\n”,y); } 其运行结果是 ( )。(全国计算机二级考试题2008年4月) [A]y=0 [B]y=1 [C]y=2 [D]y=3 解析:本题考查的是数组及指针问题。本题中指针p首先指向数组的最后一个元素,执行--p;语句后,p向前移动一个元素,即指向数组的倒数第二个元素,然后输出p所指向的元素的值。因此,正确答案为[D]。 5、有以下程序 #include “stdio.h” void fun(int *s,int nl,int n2) { int i,j,t; i=nl; j=n2; while(i

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值