当前位置:首页 > 《c语言程序设计基础》单元总结与练习题及答案()
单元八 指针的使用
单元总结提升
在本单元中,对指针的理解,以及利用指针访问不同形式的数据是核心内容。通过本单元的学习,我们应该知道:
6. 内存地址就称为指针。C语言允许用一个变量来存放指针,这种变量称为指针变量,而指针变量的值就是某个内存单元的地址。
7. 定义指针变量的一般格式为: 类型标识符 *指针变量名 ,其中:
(1)“指针变量名”前面的“*”,表示该变量是指针变量,不能省略。 (2)“类型标识符”表示该指针变量所指向的变量的数据类型。
(3)当一个指针变量已确定指向某类型的变量时,不能再指向另一种类型的变量。
3.指针变量被赋值后即可引用,引用指针变量的一般方法为: *指针变量名 。
4.指针和数组有着密切的关系,任何通过控制数组下标实现的对数组的操作,都可用指针来实现。要通过指针操作数组,首先要建立指针变量与数组之间的关系,然后才能通过指针变量访问数组元素。若有语句段:??int a[10]; int *p; ?p=a;,则对于数组元素的访问方式有 a[i]、 *(p+i) 、 p[i] ,对数组元素地址的表示方式有 a+i 、 p+i 、 &a[i] 。
5.数组名代表数组的首地址,利用函数处理一维数组数据时,函数之间的参数传递为 数组首地址 。将数组的首地址作为实参传递给函数的形参以后,实参数组和形参数组其实是同一段内存中的数据。
6.字符串是存放在某存储区域的一串字符序列,可通过字符数组和字符指针两种方式操作字符串。
7.函数返回值可以是地址(指针类型),返回值为地址的函数定义形式为: <类型标识符> *<函数名> ([形参列表]); 。
通过本单元的学习,应明确地址和指针的关系,掌握使用指针访问内存数据的基本方法。
单元练习
一.选择题
1.假设整型变量a的值是12,a的地址是2200,若想使整型指针变量p指向a,以下赋值正确的是
( )。
A.&a=2200; ??B.*p=12;
C.*p=2200; D.p=&a;
2.若有定义int *p,m=5,n;,以下正确的程序段是( )。
A.p=&n; scanf\ C.scanf(\
3.以下合法的定义是( )。
? B.p=&n; scanf(\
D.p=&n; *p=m; B.char *p=\
D.char str[13]; str[]=\
A.str[]={\ ?
C.char *p; strcpy(p, \ ( )。 A.a
??B.a[6]
4.若有定义int a[ ]={1,3,5,7,9,11}, *p=a;,则能够正确引用该数组元素的是
C.*(p--)
D.*(--p)
5.以下程序运行结果为( )。
#include
char a[]=\char *p,*q; int k; p=a;q=b; for(k=0;k<8;k++)
if(*(p+k)==*(q+k))
printf(\
A.gae ??B.ga C.Language
D.programe
二.填空题
1.给出以下程序的执行结果 。
#include
int *p1,*p2,*p; int a=10,b=12; p1=&a;p2=&b; if(a
}
{p=p1;p1=p2;p2=p;} printf(\printf(\
2.以下程序的功能是把数组元素的最大值放入a[0]中,则条件表达式应为 。
#include
int a[10]={6,7,2,9,5,10,4,3,8,1}; int *p=a,i;
for(i=0;i<10;i++,p++)
if( ) *a=*p;
printf(\
3.以下程序的输出结果是 。
#include
int a[2][3]={{1,2,3},{4,5,6}}; int m,*ptr; ptr=&a[0][0];
m=(*ptr)*(*(ptr+2))*(*(ptr+4)); printf(\
4.下列函数功能是计算str所指字符串的长度,并作为函数值返回。请填空。
int mystrlen(char *str) { }
char *p;
for(p=str; !='\\0';p++); return( );
5.以下程序中,函数scmp的功能是返回形参指针s1和s2所指字符串中较小字符串的首地址。试问当程序运行时依次输入:abcd、abba和abc三个字符串,则输出结果为 。
#include
#include
char *scmp(char *s1,char *s2) { if(strcmp(s1,s2)<0) return(s1); else }
void main( ) { int i;
char string[20],str[3][20]; for(i=0;i<3;i++)
gets(str[i]); return(s2);
strcpy(string,scmp(str[0],str[1])); strcpy(string,scmp(string,str[2])); printf(\}
*******************************************************************************
习题答案:
一.选择题
1.D 2.D 3.C 4.C 5.A
二.填空题
1.12,10,10,12 2.*p>*a 3.15
4.*p p-str 5.abba
*******************************************************************************
共分享92篇相关文档