C程序设计 第八章 指针
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、概念题
1.下列定义的含义
(1)int *p[3];
(2)int (*p)[3];
(3)int *p(int);
(4)int (*p)(int);
(5)int **p;
2.语句int a,*p=&a;的含义是什么?
3.二维数组a[3][4],&a[i][j]表示_____________,a表示___________,a[0] 表示____________。
4.下列数组元素的指针法表示。
(1)num[3]
(2)data[4][2]
写出下列数组元素的下标法表示。
(1)*(*(a+1)+2)
(2)(*(a+3))[4]
(3)*(a[2]+5)
二、判断题
1.若定义int i,*p; 使p指向i的赋值语句是*p=&i ( F )。
2.若定义int i=100,*p=&i;设为i分配的内存地址为200~201,则*p为100 ( T )。
3.若定义int a,b,*p1=&a,*p2=&b;使p2也指向a的赋值语句是p2=p1 ( T )。
4.设p是一个指针变量,则int a[6],*p;p=&a;使指针p指向数组a。( F )。
5.a是一维数组名,数组元素a[1]还可以写作“*(a++)”( F)。
6.p为指向字符串的指针变量,*p表示所指字符串的值( F)。
7.若定义int b[8], *p=b;则数组元素b[4]地址的引用为p+4 ( T )。
8.若定义int b[8], *p=b;则执行p++;后,p指向b[1](T )。
9.对于定义int a[10], *p=a+8;数组a的最后一个元素是p[1](T )。
三、单选题
1. 设int *p,i;以下正确地语句是()。
A. p=10;
B. i=p;
C. i=*p ;
D. p=&i;
2. 设char s[10];*p=s;以下语句不正确的是()。
A. p=s+5;
B. s=p+5;
C.s[2]=p[4];
D. *p=s[0];
3.若有下列定义:char c[3],*pc=c; 则对c数组元素地址的正确引用是()。
A. &c[3]
B. pc+2
C. c++
D. &c
4. 已知:float f [ ]={1.0, 2.3 , 4.5}, *pf=f; 则以下哪项不能正确引用数组元素()。
A. *pf--
B. *(--pf)
C. *(pf++)
D. *(++pf)
5. 声明语句为“int a[3][4];”,下列表达式中与数组元素a[2][1]等价的是()。
A.*(a[2]+1) B. a[9] C. *(a[1]+2) D. *(*(a+2) ) +1
6. 设变量定义为:int n,*p;char ch,*q,*g;,则不正确的语句是()。
A. p=&n;g=q=&ch;
B. p=&n;q=&ch;
C. p=&n;g=&ch
D. p=&n;q=&ch;g=p;
7. 设有定义:int a,*pa=&a;以下scanf语句中能正确为变量a读入数据的是()。
A. scanf("%d",pa);
B. scanf("%d",a);
C. scanf("%d",&pa);
D. scanf("%d",*pa);
8. 不正确的赋值或赋初值的方式是( )。
A. char str[6]={'s', 't', 'r', 'i', 'n', 'g'};
B. char str[10]= "string";
C. char *str="string";
D. char str[10]; str="string";
9. 以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是()。
A. char s[10]="abcdefg";
B. char t[]="abcdefg",*s=t;
C. char s[10];s="abcdefg";
D. char s[10];strcpy(s,"abcdefg");
10. 设char *s; 以下正确地语句是()。
A. s=”computer”;
B.* s=”computer”;
C. *s=” ”;
D.*s=‟c‟;
11. 设有程序段:“char s[ ]= "char array"; char *p; p=s; ”则下面叙述正确的是()。
A. *p与s[0]相等
B. s和p完全相同
C. s数组长度和p所指向的字符串长度相等
D. 数组s中的内容和指针变量p中的内容相等
12. 以下程序执行的结果()。
main()
{ int a,b, k=4, m=6, *p1=&k, *p2=&m;
a=p1==&m;
b=(*p1)/(*p2)+7;
printf("a=%d, b=%d\n",a,b);
}
A. a=4, b=7
B. a=0, b=7
C. a=4, b=0
D. a=0, b=0
13. 下列程序段的输出结果是( )。
int *p, *q, k = 5, j=10;
p=&j; q = &k ;p = q ; (*p)++;
printf("%d",*q);
A. 5
B. 6
C. 10
D. 11
14. 下列程序段的输出结果是( )。
int c[ ]={1, 7, 12};
int *k=c+1;