指针练习。
知识点练习】
1、内存单元的编号也叫做既然根据内存单元的编号或地址就可以找到所需的内存单元,所以通常也把这个地址称为但常把指针变量简称为。
2、定义一个指针变量的格式。
3、取变量地址的一般形式为取指针变量内容的一般形式为。
4、指针变量可以进行某些运算,但其运算的种类是有限的。它只能进行赋值运算和部分运算及运算。
5、char ch[10]=”abc”;与char *p=”abc”;两者的区别是:前者是把字符一个一个地赋给数组元素,即将字符串中的字符全部保存到数组中去,而字符串指针变量本身是一个变量,只是用于存放字符串的。
6、设有char ch[10]=”china”,*p=ch;则:p是ch[0]的p+2是___的地址,*p+2的值是p+2)的值是ch[3]-p是p++的含义是:p为___的地址,表达式的值为p)++的含义是:
p变为___的地址,表达式的值为p的含义是p变为___的地址,表达式的值为p的含义是:p变为___的地址,表达式的值为___
7、多维数组的地址, int a[3][4]=,前面介绍过,c语言允许把一个二维数组分解为多个一维数组来处理。因此数组a可分解为三个一维数组,即每一个一维数组又含有___个元素。设a数组的首地址为1000,则&a[1][2]为a[1] 为a+1为a+1为a[1]+1为a+1)+1为a+2)+1) 为。
8、指向二维数组的指针变量。int a[3][4]=,设p为指向二维数组的指针变量。可定义为使p与二维数组a相关联的语句为这样一来就可以把p看作a来使用。
9、指针数组说明的一般形式为其含义定义一个数组,而数组中的每个元素都是。
10、如果一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针的指针变量。其定义格式为。
应用练习】一、选择题。
1、执行以下程序后,a的值为b的值为。
main()
int a,b,k=4,m=6,*p1=&k,*p2=&m;
a=p1==&m;
b=(-p1)/(p2)+7;
printf("a=%d,b=%d",a,b);
1、a)-1 b)1 c)0 d)4
2、a)5 b)6 c)7 d)10
2、有四组对指针变量进行操作的语句,以下判断正确的选项是。
1)int *p,*q;q=p; int a,*p,*q;p=q=&a;
2)int a,*p,*q;q=&a;p=*q; int a=20,*p;*p=a;
3)int a=b=0,*p;p=&a;b=*p; int a=20,*p,*q=&a;*p=*q;
4)int a=20,*p,*q=&a;p=q; int p,*q;q=&p;
a)正确:(1) 不正确:(2),(3),(4) b)正确:(1),(4) 不正确:(2),(3)
c)正确:(3) 不正确:(1),(2),(4) d)以上结论都不正确。
3、若有定义:int (*p)[4];则标识符p
a)是一个指向整型变量的指针 b)是一个指针数组名。
c)是一个指针,它指向一个含有四个整型元素的一维数组。
d)定义不合法。
4、若有定义:int *p[4];则标识符p
a)是一个指向整型变量的指针。
b)是一个指针数组名。
c) 是一个指针,它指向一个含有四个整型元素的一维数组。
d) 定义不合法。
5、已有变量定义和函数调用语句:int a=25;print_value(&a);下面函数的输出结果是。
void print_value(int *x)
printf(“%d”,+x);
a)23b)24c)25d)26
6、下面能正确进行字符串赋值操作的是。
a)char s[5]=;
c)char *s ; s=”abcded)char *s; scanf(“%s”,s) ;
7、下面程序段的运行结果是。
char *s=”abcde” ;
s+=2 ; printf(“%d”,s);
a)cdeb)字符’cc)字符’c’的地址 d)不确定。
8、设有程序段:char s[ ]china”; char *p ; p=s ;则下面叙述正确的是 (
a)s和p完全相同。
b)数组s中的内容和指针变量p中的内容相等。
c)s数组长度和p所指向的字符串长度相等。
d)*p与s[0]相等。
9、若有定义:int b[4][6],*p,*q[4];且0≤i<4,则不正确的赋值语句是。
a)q[i]=b[ib)p=bc)p=b[id)q[i]=&b[0][0]
10、若有定义:int x[10]=,p1;则数值不为3的表达式是( )
a)x[3] b)p1=x+3,*p1++c) p1=x+2,*(p1d)p1=x+2,*+p1
二、写出下列程序运行结果。
*s,char a,int n)
int j;
*s=a; j=n ;
while (*s return j; }
main (
char c[6] ;
int i ;
for (i=1; i<=5 ; i++)c+1)=’a’+i+1;
printf(“%d”,func(c,’e’,5));
(char *s)
char *p=s;
while (*p) p++
return (p-s) ;
main (
char *a=”abcdef” ;
printf(“%d”,fun(a
*a,int t1,int t2)
char ch;
while (t1 ch = a+t1); a+t1)=*a+t2) ;a+t2)=ch ;
t1++ t2
main (
char s[12];
int i;
for (i=0; i<12 ; i++)s[i]=’a’+i+32 ;
sub(s,7,11);
for (i=0; i<12 ; i++)printf (“c”,s[i]);
printf(“
*a,char b)
while (*a++)0’)
while (*a-1) *a--)a-1);
*(a--)b; }
main (
char s=97531”,c;
c = getchar (
sub(s,c); puts(s) ;
char *a=
char (*p)[ int j ;
p = a + 3 ;
for (j=3; j>=0; j--)
printf(“%s”,*p
三、程序填空。
1、下面程序的功能是检查给定字符串s是否满足下列两个条件:
a)字符串s中左括号”(”的个数与右括号”)”的个数相同;
b)从字符串s的首字符起顺序查找右括号”)”的个数在任何时候均不超过所遇到的左括号”(”的个数; 若字符串同时满足上述两个条件,函数返回1,否则返回0
main()
char c[80];
int d;
gets(c); d=check(c);
printf("%s",d?"yes":"no");
check (char *s)
int l=0,r=0;
while (*s!='0')
return
2、下面程序是判断输入的字符串是否是”回文”,(顺读和倒读都一样的字符串,称”回文”,如level)。
c语言试卷c
a.p q c.p n1 10 若有说明语句 int a,b,c,d c 则能从键盘读入三个整数分别赋给变量a b c的语句是。a.scanf d d d a,b,d b.scanf d d d a,b,d c.scanf d d d a,b,dd.scanf d d d a,b,d 11 c语言标...
C语言试卷A
青海大学试卷 a卷 系别 班级学号姓名。考试课程 程序设计基础 c 考试日期 2009 年 12月17日。注 所有答案均写在答题卡上,答在试卷上不得分,考试结束后试卷和答题卡一并交回。一 填空题 每空1分,共16分 1 整型静态数组没有初始化,也没有赋值,此时数组元素的值均为 0 2 数组在内存中占...
C语言试卷
一 填空共5题 共计10分 第1题 2.0分 题号 339 赋值运算符的结合性是由 右 至 左 第2题 2.0分 题号 925 在c 语言结构化程序中,函数 是程序的基本组成单元 在c 语言的面向对象设计框架中,对象 是程序的基本组成单元。第3题 2.0分 题号 926 c 语言的参数传递机制包括传...