c)p变量中存放的地址值可以改变 d)a中只能存放10个字符
45.下面程序的运行结果是____. #include
char *s1=\ char *s2=\ s1+=2;s2+=2;
printf(\ }
a)正数 b)负数 c)零 d)不确定的值
46.下面程序的运行结果是_C__. #include
while(s1 main() {char *p; p=\ fun(p,strlen(p)); puts(p); } a)7654321 b)1714171 c)1711717 d)7177171 47.若有以下定义,则对a数组元素的正确引用是______. int a[5],*p=a; a)*&a[5] b)a+2 c)*(p+5) d)*(a+2) 48.若有定义:int a[2][3],则对a数组的第i行j列元素地址的正确引用为_____ a)*(a[i]+j) b)(a+i) c)*(a+j) d)a[i]+j 49.若有以下定义,则p+5表示___. int a[10],*p=a; a)元素a[5]的地址 b)元素a[5]的值 c)元素a[6]的地址 d)元素a[6]的值 50. 以下程序的输出结果是__A______. #include void fun(int x); int main() { int x = 3; fun(x); printf(“x = %d\\n”, x); } void fun(int x) { x = 5; } A) 3 B) 5 C) 8 D) 2 51. 以下程序的输出结果是__B______. #include void fun(int *p); int main() { int x = 3; fun(&x); printf(“x = %d\\n”, x); } void fun(int *p) { *p = 5; } A) 3 B) 5 C) 8 D) 2 52. 以下count函数的功能是统计substr在母串str中出现的次数。 int count(char *str,char *substr) { int i,j,k,num=0; for(i=0; ① ;i++) {for( ② ,k=0;substr[k]==str[j];k++,j++) if(substr[ ③ ]==’\\0’) {num++;break;} } return num; } ① A) str[i]==substr[i] B) str[i]!=‘\\0’ C) str[i]==‘\\0’ D) str[i]>substr[i] ② A) j=i+1 B) j=i C) j=i+10 D) j=1 ③ A) k B) k++ C) k+1 D) ++k 53. 以下Delblank函数的功能是删除字符串s中的所有空格(包括Tab、回车符和换行符)。 void Delblank(char *s) { int i,t; char c[80]; for(i=0,t=0; ① ;i++) if(!isspace( ② ))c[t++]=s[i]; c[t]=‘\\0’; strcpy(s,c); } ① A) s[i] B) !s[i] C) s[i]=‘\\0’ D) s[i]==‘\\0’ ② A) s+i B) *c[i] C) *(s+i)=‘\\0’ D) *(s+i) 54. 以下conj函数的功能是将两个字符串s和t连接起来。 char *conj(char *s,char *t) { char *p=s; while(*s) ① ; while(*t) {*s= ② ;s++;t++;} *s=‘\\0’; ③ ; } ① A) s-- B) s++ C) s D) *s ② A) *t B) t C) t-- D) *t++ ③ A) return s B) return t C) return p D) return p-t 55. 下列程序的输出结果是 。 #include {int **k,*a,b=100;a=&b; k=&a;printf(“%d\\n”,**k);} A) 运行出错 B) 100 C) a的地址 D) b的地址 56. 下列程序的输出结果是 。 SS A)出错 B) 18, 5 C) 5, 9 D) 5, 18 57. 若定义了以下函数: void f(……) {…… p=(double *)malloc(10*sizeof(double)); …… } p是该函数的形参,要求通过p把动态分配存储单元的地址传回主调函数,则形参p的正确定义应当是 。 A) double *p B) float **p C) double **p D) float *p 二、判断题 1.(F)指针变量里存放的是地址值,因此指针变量只能是int型的。 2.(T)在C语言中,所谓指针型数据,即指该数据是一个地址。 3.(T)有一个一维数组a[10],那么a与&a[0]等价。 4.(F)如有说明:int b[10], *p = b;表明在使用时b与p就完全等价了。 5.(T)数组中的每一个元素相当于一个变量。若要让一个指针变量指向它,必须用“&数组元 素”的方法向该指针变量赋值。 6.(F)有如下程序段:int i, j = 2, k, *p = &i;k = *p + j;这里出现的两个“*”号,含义是一样的。 7.(F)在C语言中,每一个变量在内存里占用的单元数都是相同的。 8.(T)通过指针变量,就能间接地得到它所指向的变量的内容。 9.(T)说明语句:int *p, p1, p2;只说明了一个能指向int型变量的指针。 10.(F)有说明:int *p;且p指向地址为1500的内存单元,那么经过操作“p++;”后,p将 指向1501的内存单元。 11.(F)数组元素可以是不同数据类型的。 12.(F)如果初值表中的初值个数少于数组长度,那么C语言编译程序会自动把剩余的元素初 始化为初值表中的最后一个值。 13.主调函数把单个数组元素传递给修改该元素值的被调函数时,主调函数就能够得到修改 后的值。(F) 14.(T)设p是指向数组a的指针变量,则a[i]和p[i]等价。 15.(T)一个变量的指针就是该变量的地址。 16.(F)若定义int **p;则程序中调用*p时,它代表的是p的地址。 17.(F)若指针占用的内存大小为2Byte,则指向它的二重指针占用内存大小为4Byte . 18.(F)带参main函数中的形参的值可以在程序中得到。 19.(F)main(argc,argv)中的参数argv的定义格式为char argv[]。 20.(F)int **p;表示定义一个*p指针变量。 21.(F)在C语言中允许将一个整数赋给指针变量。 22.(F)一个指针变量加1表示将该指针变量的原值(地址)加1。 23.(F)int *p();表示定义一个指向函数的指针变量p。 24.(F)当函数实参中使用指针变量时,形参变量也必须使用指针变量。 25.(F)*p++等价于(*p)++。 26.(F)使用指针技术,可以通过修改形参变量的值达到修改实参变量的值的目的。。 27.(F)因为用字符数组和字符指针变量都能实现字符串的存储和运算,因此它们二者是完全等价的。 28.(T)对指向函数的指针变量,像p+n、p++、p- -等运算是无意义的。 29.(T)main(int argc,char *argv[])中的参数argc表示命令行只参数的个数。 30.(T)在int a[3][4];中a+i和*(a+i)的含义是不一样的。 31.(F)char *p[10];定义了一个指向字符数组的指针变量。