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