C语言指针练习+答案+讲解Word格式文档下载.docx
- 文档编号:13440743
- 上传时间:2022-10-10
- 格式:DOCX
- 页数:19
- 大小:49.14KB
C语言指针练习+答案+讲解Word格式文档下载.docx
《C语言指针练习+答案+讲解Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C语言指针练习+答案+讲解Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。
a;
a是整形变量
b是整形指针变量,指向a
printf("
*b);
就是输出指针变量b,
所指变量的值输出结果511
3.已有定义 inta=2,*p1=&
a,*p2=&
下面不能正确执行的赋值语句是(B)。
A.a=*p1+*p2;
B.p1=a;
C.p1=p2;
D.a=*p1*(*p2);
47、已知在程序中定义了如下的语句:
int*P1,*P2;
intk;
p1=&
k;
p2=&
则下列语句中不能正确执行是(B)
A、k=*P1+*P2;
B、p2=k;
C、P1=P2;
D、K=*P1*(*P2);
P1P2是指针,K是整型变量,变量怎么可以赋值给指针呢?
A其实是执行了K=K+K(P1和P2都指向K,所以*P1*P2其实都是指K)
C是赋值语句
D其实执行了K=K*K
4.变量的指针,其含义是指该变量的(B)。
A.值B.地址C.名D.一个标志
5.若有说明语句:
inta,b,c,*d=&
c;
,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是(A)。
A.scanf("
%d%d%d"
&
a,&
b,d);
B.scanf("
a,b,d);
C.scanf("
b,&
d);
D.scanf("
a,b,*d);
对于intc,*d=&
c;
,c是一整型数据,d是一指针,它指向变量c(即d=&
c,*是指针类型的说明符),所以,输入c的值可以用scanf("
%d"
&
c);
也可以用scanf("
d);
6.若已定义inta=5;
下面对
(1)、
(2)两个语句的正确解释是(D)。
(1)int*p=&
(2)*p=a;
A.语句
(1)和
(2)中的*p含义相同,都表示给指针变量p赋值。
B.
(1)和
(2)语句的执行结果,都是把变量a的地址值赋给指针变量p。
C.
(1)在对p进行说明的同时进行初始化,使p指向a;
(2)变量a的值赋给指针变量p。
D.
(1)在对p进行说明的同时进行初始化,使p指向a;
(2)将变量a的值赋予*p。
A:
(1):
*p,定义p为int类型指针
(2):
*p,表示p所指向的变量
B
(1)把变量a的地址赋给指针变量p
(2)把变量a的值,赋值给P所指向的变量
C前半句正确,后半句错误,
(2)是把变量a的值赋值给P所指的变量。
#include<
stdio.h>
main()
{
int*p,*q,a,b;
p=&
inputa:
"
);
scanf("
*p);
…
}
A.*p表示的是指针变量p的地址
B.*p表示的是变量a的值,而不是变量a的地址
C.*p表示的是指针变量p的值
D.*p只能用来说明p是一个指针变量
scanf后面的参数是地址,是接收的值放到这个地址
12.下面程序的功能是从输入的十个字符串中找出最长的那个串。
请在________处填空。
#include"
stdio.h"
string.h"
#defineN10
chars[N][81],*t;
intj;
for(j=0;
j<
N;
j++)
gets(s[j]);
t=*s;
for(j=1;
if(strlen(t)<
strlen(s[j]))___A_____;
printf("
themaxlengthoftenstringsis:
%d,%s\n"
strlen(t),t);
A.t=s[j]B.t=&
s[j]C.t=s++D.t=s[j][0]
13.下面判断正确的是(C)。
A.char*s="
girl"
;
等价于char*s;
*s="
B.chars[10]={"
};
等价于chars[10];
s[10]={"
C.char*s="
等价于char*s;
s="
D.chars[4]="
boy"
t[4]="
等价于 chars[4]=t[4]="
14.设char*s="
\ta\017bc"
;
则指针变量s指向的字符串所占的字节数是(C)。
A.9B.5C.6D.7
首先,字节数不是指字符串长度,字符串长度比存储字节数少一。
\t是一个转义字符相当于键盘“Tab”
键a普通字符
\017转义字符ASCII代码值为8进制数17即10进制数15的那个符号
b普通字符c普通字符
字符串结束标志‘\0’
s是字符串类型。
每一个都是char型变量;
char型变量的二进制长度是8,也就是一个字节,所以指针变量s指向的字符串所占字节数是6,字符串长度是5.
15.下面程序段中,for循环的执行次数是(C)。
char*s="
\ta\018bc"
for(;
*s!
='
\0'
s++)printf("
*"
\ta\018bc\0各一次
A.9B.5C.6D.7
16.以下不能正确进行字符串赋初值的语句是(A)。
A.charstr[5]="
good!
B.char*str="
C.charstr[]="
D.charstr[5]={'
g'
'
o'
'
d'
1A.charstr[5]={"
//这个不符合C语言的语法规定,字符串初始化是这样写的:
charstr[6]="
//因最后还有一个结束符,因此数组元素应该是6个。
2题目表述有些不准确C,D叫初始化,B叫赋值。
3题目中的单双引号全部是中文的,这也不符合C语言语法。
应该改为英文的。
17.若指针p已正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是(A)。
A.p=2*(int*)malloc(sizeof(int));
B.p=(int*)malloc(2*sizeof(int));
C.p=(int*)malloc(2*2);
D.p=(int*)calloc(2,sizeof(int));
malloc的全称是memoryallocation,中文叫动态内存分配,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存。
18.下面程序段的运行结果是(C)。
char*s="
abcde"
s+=2;
s);
A.cdeB.字符'
c'
C.字符'
的地址D.无确定的输出结果
19.设有如下的程序段:
chars[]="
*t;
t=s;
则下列叙述正确的是(D)。
A.s和t完全相同
B.数组s中的内容和指针变量t中的内容相等
C.s数组长度和t所指向的字符串长度相等
D.*t与s[0]相等
20.以下正确的程序段是(B)。
A.chars[20];
B.char*s;
scanf("
%s"
s);
scanf("
C.chars[20];
D.chars[20],*t=s;
s[2]);
t[2]);
21.下面程序段的运行结果是(C)。
#include"
main()
{
intm=10,n=20;
char*format="
%s,m=%d,n=%d\n"
m*=n;
printf(format,"
m*=n"
m,n);
A.format,"
m,nB.format,"
C.m*=n,m=200,n=20D.以上结果都不对
22.以下与库函数strcpy(char*p,char*q)功能不相等的程序段是(D)。
A.strcpy1(char*p,char*q)
{while((*p++=*q++)!
B.strcpy2(char*p,char*q)
{while((*p=*q)!
)
{p++;
q++;
C.strcpy3(char*p,char*q)
{while(*p++=*q++);
D.strcpy4(char*p,char*q)
{while(*p)
*p++=*q++;
23.下面程序段的运行结果是(C)。
example!
while(*t!
p'
{printf("
%c"
*t-32);
t++;
A.EXAMPLE!
B.example!
C.EXAMD.example!
24.以下正确的程序段是(C)。
A.chars[]="
12345"
t[]="
6543d21"
strcpy(s,t);
B.chars[20],*t="
strcat(s,t);
C.chars[20]="
"
*t="
strcat(s,t);
D.char*s="
54321"
strcat(s,t);
25.以下与库函数strcmp(char*s,chat*t)的功能不相等的程序段是(D)。
A.strcmp1(char*s,chat*t)
{for(;
*s++==*t++;
if(*s=='
)return0;
return(*s-*t);
B.strcmp2(char*s,char*t)
{for(;
if(!
*s)return0;
C.strcmp3(char*s,char*t)
*t==*s;
{if(!
*t)return0;
t++;
s++;
}
D.strcmp4(char*s,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 指针 练习 答案 讲解