C语言指针.docx
- 文档编号:4627140
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:107
- 大小:49.67KB
C语言指针.docx
《C语言指针.docx》由会员分享,可在线阅读,更多相关《C语言指针.docx(107页珍藏版)》请在冰豆网上搜索。
C语言指针
C语言指针
1、若有以下定义和语句
#include
inta=4,b=3,*p,*q,*w;
p=&a;q=&b;w=q;q=NULL;
则以下选项中错误的语句是________。
A、*q=0;
B、*p=*w;
C、w=p;
D、*p=a;
答案a
2、在说明语句:
int*f();中,标识符f代表的是________。
A、一个用于指向函数的指针变量
B、一个用于指向整型数据的指针变量
C、一个用于指向一维数组的行指针
D、一个返回值为指针型的函数名
答案d
3、不合法的main函数命令行参数表示形式是________。
A、main(intarc,char**arv)
B、main(intargv,char*argc[])
C、main(intargc,char*argv)
D、main(inta,char*c[])
答案c
4、有以下程序
main()
{char*s[]={"one","two","three"},*p;
p=s[1];
printf("%c,%s\n",*(p+1),s[0]);
}
执行后输出结果是________。
A、t,one
B、o,two
C、w,one
D、n,two
答案c
5、有以下程序
main()
{intx[8]={8,7,6,5,0,0},*s;
s=x+3;
printf("%d\n",s[2]);
}
执行后输出结果是________。
A、5
B、0
C、6
D、随机值
答案b
6、若定义:
inta=511,*b=&a;,则printf("%d\n",*b);的输出结果为________。
A、512
B、无确定值
C、a的地址
D、511
答案d
7、若有定义:
int*p[3];,则以下叙述中正确的是________。
A、定义了一个名为*p的整型数组,该数组含有三个int类型元素
B、定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针
C、定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素
D、定义了一个基类型为int的指针变量p,该变量具有三个指针
答案b
8、有以下程序
#include
main()
{charstr[][20]={"Hello","Beijing"},*p=str[0];
printf("%d\n",strlen(p+20));
}
程序运行后的输出结果是________。
A、5
B、20
C、7
D、0
答案c
9、若有说明:
intn=2,*p=&n,*q=p;,则以下非法的赋值语句是________。
A、n=*q;
B、p=q;
C、*p=*q;
D、p=n;
答案d
10、有以下程序
#include
main(intargc,char*argv[])
{inti,len=0;
for(i=1;i len+=strlen(argv[i]); printf("%d\n",len); } 程序编译连接后生成的可执行文件是ex1.exe, 若运行时输入带参数的命令行是: ex1abcdefg10<回车> 则运行的结果是________。 A、12 B、22 C、17 D、9 答案d 11、以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是________。 main() {int*p,*q,a,b; p=&a; printf("inputa: "); scanf("%d",*p); …… } A、*p表示的是指针变量p的值 B、*p表示的是变量a的值,而不是变量a的地址 C、*p只能用来说明p是一个指针变量 D、*p表示的是指针变量P的地址 答案b 12、已有定义intk=2;int*ptr1,*ptr2;且ptrl和ptr2均已指向变量k,下面不能正确执行的赋值语句是________。 A、ptrl=ptr2; B、ptr2=k; C、k=*ptr1*(*ptr2); D、k=*ptrl+*ptr2; 答案b 13、变量的指针,其含义是指该变量的________。 A、名 B、地址 C、一个标志 D、值 答案b 14、若有语句int*point,a=4;和point=&a;下面均代表地址的一组选项是________。 A、*&point,*point,&a B、a,point,*&a C、&*a,&a,*point D、&a,&*point,point 答案d 15、下面说明不正确的是________。 A、char*a;a="china"; B、chara[]="china"; C、chara[10]="china"; D、chara[10],*p;p=a="china"; 答案d 16、若有说明语句 chara[]="Itismine"; char*p="Itismin; 则以下不正确的叙述是________。 A、p变量中存放的地址值可以改变 B、a+1表示的是字符t的地址 C、p指向另外的字符串时,字符串的长度不受限制 D、a中只能存放10个字符 答案d 17、若有以下定义,则对a数组元素的正确引用是________。 inta[5],*p=a; A、*(p+5) B、*&a[5] C、a+2 D、*(a十2) 答案d 18、若有以下定义,则对a数组元素地址的正确引用是________。 inta[5],*p=a; A、&a+1 B、p+5 C、*a+1 D、&a[0] 答案d 19、若有定义: inta[2][3];则对a数组的第i行第j列(假设i,j已正确说明并赋值)元素值的正确引用为________。 A、*(*(a+i)+j) B、*(a+i)+j C、(a十i)[j] D、*(a+i+j) 答案a 20、若有定义: inta[2][3];则对a数组的第i行第j列(假设i,j已正确说明并赋值)元素地址的正确引用为________。 A、*(a+j) B、*(a[i]+j) C、(a+i) D、a[i]+j 答案d 21、若有以下定义和语句,则对a数组元素地址的正确引用为________。 inta[2][3],(*p[3]) p=a; A、p[2] B、(p+1)+2 C、p[1]+1 D、*(p+2) 答案c 22、若有以下定义和语句,则对a数组元素的正确引用为________。 inta[3][3],(*p)[3]; p=a A、*(p+2)+1 B、p[1]+2 C、*(p[2]+1) D、(p+1)[0] 答案c 23、若有定义: inta[5];则a数组中首元素的地址可以表示为________。 A、a+1 B、&a[1] C、a D、&a 答案c 24、若有定义: int(*P)[4];则标识符p________。 A、是一个指针数组名 B、定义不合法 C、是一个指针,它指向一个含有四个整型元素的一维数组 D、是一个指向整型变量的指针 答案c 25、若有以下定义和赋值语句,则对S数组的第i行第j列(假设i,j已正确说明并赋值)元素地址的合法引用为________。 ints[2][3]={0},(*p)[3]; p=s; A、p[i]+j B、(*(p+i))[j] C、*(p(i)+j) D、(p+i)+j 答案a 26、若有以下定义和赋值语句.,则对b数组的第i行第j列(假设i,j已正确说明并赋值)元素的非法引用为________。 intb[2][3]={0},(*p)[3]; p=b; A、*(p[i]+j) B、(*(p+1))[j] C、*(p+i)+j D、*(*(p+i)+j) 答案c 27、以下与int*q[5];等价的定义语句是________。 A、int(*q)[5]; B、intq[5]; C、int*q; D、int(*q[5]); 答案d 28、若有以下定义,则*(p+5)表示________。 inta[10],*p=a; A、元素a[6]的地址 B、元素a[5]的值 C、元素a[6]的值 D、元素a[5]的地址 答案b 29、若有定义: int*p[4];则标识符p________。 A、是一个指针,它指向一个含有四个整型元素的一维数组 B、是一个指针数组名 C、说明不合法 D、是一个指向整型变量的指针 答案b 30、一以下正确的说明语句是________。 A、inta[]={1,3,5,7,9};int*num[5]={a[0],a[2],a[3],a[4]}; B、inta[5],*num[5]={&a[0],&a[1],&a[2],&a[3],&a[4]}; Cinta[3][4],(*num)[4];num[1]=&a[1][3]; D、int*b[]={1,3,5,7,9}; 答案b 31、若有以下定义,且0<=i<4,则不正确的赋值语句是________。 intb[4][6],*p,*q[4]; A、p=b[i]; B、p=b; C、q[i]=&b[0][0]; D、q[i]=b[i]; 答案b 32、以下正确的定义语句和赋值语句是________。 A、doubleb[3][5],s[5][3]},*q;q=b;s=q; B、floatb[3][5],*P[3];P[0]=b[0];p[2]=*b+4; C、intb[10],*q;char*s;q=b;s=b; D、intb[3][5],(*P)[3],(*q)[5];P=b;q=b; 答案b 33、若有以下定义,则P十5表示________。 inta[10],*p=a; A、元素a[5]的地址 B、元素a[6]的值 C、元素a[5]的值 D、元素a[6]的地址 答案a 34、若有以下定义,且0<=i<6,则正确的赋值语句是________。 ints[4][6],t[6][4],(*p)[6]; A、p=s[i]; B、p=s; C、p=t[i]; D、p=t; 答案b 35、若有定义: inta[4][6];则能正确表示a数组中任一元素a[i][j](此0<=i<4,o<=j<6)地址的表达式是________。 A、&a[0][0]+6*i+j B、&a[0][0]+6*j+1 C、&a[0][0]+4*j+i D、&a[0][0]+4*i+j 答案a 36、以下选项中,对指针变量P的正确操作是________。 A、inta[5]; int*p=a=1000; B、inta[5],*p; p=a; C、inta[5]; int*p1,*p2=a; *p1=*p2; D、inta[5],*p; p=&a; 答案b 37、若有以下定义和语句,则能正确表示a数组元素地址的表达式是________。 doublea[5],*p1; p1=a; A、a B、&a[5] C、p1+5 D、*p1 答案a 38、若有以下定义,且0<=i<5,则对a数组元素的非法引用是________。 inta[5],*p=a; A、*(p+i) B、a[i] C、*(a+i) D、*(&a+i) 答案d 39、若有以下定义,则数值不为3的表达式是________。 intx[10]={0,1,2,3,4,5,6,7,8,9},*p1; A、p1=x+3,*p1++ B、p1=x+2,*++p1 C、p1=x+2,*(p1++) D、x[3] 答案c 40、若有以下定义,则能正确的程序段是________。 int*p,*s,i,j; char*q,ch; A、main() {p=&i; q=&ch; p=q; ....} B、main() {*p=1.00; ....} C、main() {p=&ch; s=p; .....} D、main() {p=&i; q=&ch; *p=40;*q=*p; ....} 答案d 41、设有以下定义: char*cc[22]={"1234","5678"}; 则正确的叙述是________。 A、cc数组的两个元素中各自存放字符串"1234"和"5678"的首地址 B、cc数组元素的值分别是"1234"和"5678" C、cc数组的两个元素中分别存放的是含4个字符的一维字符数组的首地址 D、cc是指针变量,它是指向两个数组元素的字符型一维数组 答案a 42、以下正确的叙述是________。 A、C语言允许main函数带形参,形参名只熊是argc和argv B、若有说明: main(intargc,char*argv),则形参arc的值必须大于i C、当main函数带有形参时,传给形参的值只能从命令行中得到 D、C语言允许main函数带形参,且形参个数和形参名均可由用户指定 答案c 43、main函数的正确说明形式是________。 A、main(intargc,charargv) B、main(intabc,char**abv) C、main(intc,charv[]) D、main(intargc,char*argv) 答案b 44、若有说明: char *language[]={"FORTRAN","BASIC","PASCAL","JAVA","C"};则表达式*language[1]>*language[3]比较的是________。 A、字符串BASIC和字符串JAVA B、字符串FORTRAN和字符串PASCAL C、字符B和字符J D、字符F和字符P 答案c 45、若有说明: char*language[]={"FORTRAN","BASIC","PASCAL", "JAVA","C"};则language[2]的值是________。 A、一个字符串 B、一个地址 C、一个不定值 D、一个字符 答案b 46、若有说明: char *language[]={"FORTRAN","BASIC",'PASCAL","JAVA","C"};则以下不正确的叙述是________。 A、language是一个字符型指针数组,它包含5个元素,每个元素都是一个指向字符串变量的指针 B、language+2表示字符串"PASCAL"的首地址 C、*language[2]的值是字母P D、language是一个字符型指针数组,它包含5个元素,其初值分别是"FORTRAN","BASIC","PASCAL","JAVA","C" 答案d 47、语句int(*ptr)();的含义是________。 A、ptr是指向int型数据的指针变量 B、ptr是一个函数名,该函数的返回值是指向int型数据的指针 C、ptr是指向函数的指针,该函数返回一个int型数据 D、ptr是指向一维数组的指针变量 答案c 48、若有函数max(a,b),并且已使函数指针变量p指向函数max,当调用该函数时,正确的调用方法是________。 A、*pmax(a,b); B、*p(a,b); C、(*p)(a,b); D、(*p)max(a,b); 答案c 49、已有函数max(a,b),为了让函数指针变量P指向函数max,正确的赋值方法是________。 A、p=max; B、*p=max(a,b); C、*P=max; D、p=max(a,b); 答案a 50、已有定义int(*p)();指针p可以________。 A、表示函数的类型 B、指向函数的入口地址 C、表示函数返回值的类型 D、代表函数的返回值 答案b 51、以下定义语句中正确的是________。 A、float*a,b=&a; B、inta=10,*b=&a; C、chara='A'b='B'; D、floata=b=10.0; 答案b 52、若有以下说明和语句,intc[4][5],(*p)[5];p=c;能正确引用c数组元素的是________。 A、*(p[0]+2) B、*(p+1)+3 C、p+1 D、*(p+3) 答案a 53、有以下程序 main() {inta=7,b=8,*p,*q,*r; p=&a;q=&b; r=p;p=q;q=r; printf("%d,%d,%d,%d\n",*p,*q,a,b); } 程序运行后的输出结果是________。 A、7,8,8,7 B、8,7,7,8 C、8,7,8,7 D、7,8,7,8 答案b 54、有以下程序 main() {inta[]={1,2,3,4,5,6,7,8,9,10,11,12,},*p=a+5,*q=NULL; *q=*(p+5); printf("%d%d\n",*p,*1); } 程序运行后的输出结果是________。 A、510 B、611 C、报错 D、66 答案c 55、已有定义: inti,a[10],*p;,则合法的赋值语句是________。 A、p=a+2; B、p=a[2]+2; C、p=100; D、p=a[5]; 答案a 56、若有说明语句: inta,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,&d); D、scanf("%d%d%d",a,b,d); 答案a 57、有以下程序 int*f(int*x,int*y) {if(*x<*y) returnx; else returny; } main() {inta=7,b=8,*p,*q,*r; p=&a;q=&b; r=f(p,q); printf("%d,%d,%d\n",*p,*q,*r); } 执行后输出结果是________。 A、8,7,7 B、7,8,7 C、8,7,8 D、7,8,8 答案b 58、有以下程序,输出结果为________。 voidfun(char*a,char*b) {a=b;(*a)++;} main() {charc1='A',c2='a',*p1,*p2; p1=&c1;p2=&c2;fun(p1,p2); printf("%c%c\n",c1,c2); } A、Ab B、Bb C、aa D、Aa 答案a 59、若程序中已包含头文件stdio.h,以下选项中,正确运用指针变量的程序段是________。 A、long*L;*L='\0'; B、chart='m',*c=&t; C、float*f=NULL;*f=10.5; D、int*i=NULL;scanf("%d",i); 答案b 60、有以下程序段 main() {inta=5,*b,**c; c=&b;b=&a; …… } 程序在执行了c=&b;b=&a;语句后,表达式: **c的值是________。 A、变量b中的值 B、变量b的地址 C、变量a中的值 D、变量a的地址 答案c 61、已定义以下函数 fun(char*p2,char*p1) {while((*p2=*p1)! ='\0'){p1++;p2++;}} 函数的功能是________。 A、将p1所指字符串复制到p2所指内存空间 B、检查p1和p2两个指针所指字符串中是否有'\0' C、将p1所指字符串的地址赋给指针p2 D、对p1和p2两个指针所指字符串进行比较 答案a 62、有以下程序 #include main() {char*p="abcde\0fghjik\0"; printf("%d\n",strlen(p)); } 程序运行后的输出结果是________。 A、6 B、12 C、15 D、5 答案d 63、有以下程序 #include main() {char*p,*q; p=(char*)malloc(sizeof(char)*20);q=p; scanf("%s%s",p,q);printf("%s%s\n",p,q); } 若从键盘输入: abcdef<回车>,则输出结果是________。 A、defdef B、dd C、abcdef D、abcd 答案a 64、以下程序的运行结果是________。 sub(intx,inty,int*z) {*z=y-x;} main() {inta,b,c; sub(10,5,&a); sub(7,a,&b); sub(a,b,&c); printf("%4d,%4d,%4d\n",a,b,C); } A、-5,-12,-17 B、-5,-12,-7 C、5,-2,-7 D、5,2,3 答案b 65、执行以下程序后,a的值为0,b的值为________。 main() {inta,b,k=4,m=6,*p1=&k,*p2=&m; a=p1==&m; b=(-*p1)/(*p2)+7; printf("a=%d\n",a); printf("b=%d\n",b); } A、6 B、10 C、7 D、5 答案c 66、下面程序应能对两个整型变量的值进行交换。 以下正确的说法是________。 main() {inta=10,b=20; printf(" (1)a=%d,b=%d\n",a,b); swap(&a,&b); printf(" (2)a=%d,b=%d\n",a,b); } swap(intp,intq) {intt; t=p;p=q;q=t; } A、该程序有错,只要将swap()函数中的形参p和q以及t均定义为指针(执行语句不变)即可 B、该程序完全正确 C、该程序有错,只要将语句swap(&a,&b);中的参数改为a,b即可 D、以上说法都不正确 答案d 67、以下程序有错,错误原因是________。 main() {int*p,i;char*q,ch; p=&i; q=&ch; *p=40; *p=*q; …… } A、q没有指向具体的存储单元,所以*q没有实际意义 B、p和q的类型不一致,不能执行*p=*q;语句 C、*p中存放的是地址值,因此不能执行
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 指针