C语言指针练习 答案 讲解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C. char *s="girl";
等价于 char *s; s="girl";
D. char s[4]= "boy", t[4]= "boy"; 等价于 char s[4]=t[4]= "boy"
14.设 char *s="\ta\017bc";则指针变量 s 指向的字符串所占的字节数是(C)。
A. 9
A. 9
B. 5
C. 6
D. 7
16.以下不能正确进行字符串赋初值的语句是(A)。
A. char str[5]= "good!";
B. char *str="good!";
C. char str[]="good!";
D. char str[5]={'g', 'o','o', 'd'};
1 A.char str[5]={"good!"};//这个不符合 C 语言的语法规定,字符串初
B(1)把变量 a 的地址赋给指针变量 p(2)把变量 a 的值,赋值给 P 所
指向的变量
C 前半句正确,后半句错误,(2)是把变量 a 的值赋值给 P 所指的变量。
7. 若有语句 int *p, a=10; p=&a; 下面均代表地址的一组选项是(D)。
A. a, p, *&a
B. &*a, &a, *p
t++;}
}
A . EXAMPLE!
B . example!
C . EXAM
D. example!
24.以下正确的程序段是(C)。
A. char s[]="12345", t[]="6543d21"; strcpy( s,t);
B. char s[20], *t="12345"; strcat(s,t);
A. a=*p1+*p2; B. p1=a;
C. p1=p2;
D. a=*p1*(*p2);
47、已知在程序中定义了如下的语句:
int *P1,*P2;
int k;
p1=&k;p2=&k;
则下列语句中不能正确执行是( B )
A、k=*P1+*P2; B、p2=k; C、P1=P2; D、K=*P1 * (*P2);
B. 5
C. 6
Байду номын сангаас
D. 7
首先,字节数不是指字符串长度,字符串长度比存储字节数少一。
\t 是一个转义字符 相当于键盘“Tab”
键 a 普通字符
\017 转义字符 ASCII 代码值为 8 进制数 17 即 10 进制数 15 的那个符号
b 普通字符 c 普通字符
字符串结束标志‘\0’
s 是字符串类型。每一个都是 char 型变量;
m*=n;
printf(format, "m*=n", m,n);
}
A. format, "m*=n", m, n
B. format, "m*=n"
C. m*=n, m=200, n=20
D. 以上结果都不对
22.以下与库函数 strcpy(char *p, char *q)功能不相等的程序段是(D)。
是指针类型的说明符),所以,输入 c 的值可以用 scanf("%d",&c); 也可以用
scanf("%d",d);
6. 若已定义 int a=5; 下面对(1)、(2)两个语句的正确解释是(D)。
(1) int *p=&a;
(2) *p=a;
A. 语句(1)和(2)中的*p 含义相同,都表示给指针变量 p 赋值。
赋给变量 a、b、c 的语句是(A)。
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);
对于 int c,*d=&c;,c 是一整型数据,d 是一指针,它指向变量 c(即 d=&c,*
始化是这样写的:
char str[6]="good!"; //因最后还有一个结束符,因此数组元素应该是 6
个。
2 题目表述有些不准确 C,D 叫初始化,B 叫赋值。
3 题目中的单双引号全部是中文的,这也不符合 C 语言语法。应该改为英文
的。
17.若指针 p 已正确定义,要使 p 指向两个连续的整型动态存储单元,不正确的
char 型变量的二进制长度是 8,也就是一个字节,所以指针变量 s 指向的
字符串所占字节数是 6 ,字符串长度是 5.
15.下面程序段中,for 循环的执行次数是(C)。
char *s="\ta\018bc";
for (;*s!='\0';s++) printf("*");
\t a \018 b c \0 各一次
A. strcpy1(char *p, char *q)
{ while ((*p++=*q++)!='\0');
}
B. strcpy2( char *p, char *q)
{ while((*p=*q)!='\0')
{p++;
q++;}
}
C. strcpy3(char *p, char *q)
{ while (*p++=*q++);
}
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="girl";
B . char s[10]={"girl"};
等 价 于 char s[10];
s[10]={"girl"};
第七章 指针
7.1 选择题
1. 若有说明:int a=2, *p=&a, *q=p;,则以下非法的赋值语句是(D)。
A. p=q;
B. *p=*q;
C. a=*q;
D. q=a;
a 是整型数,
int *p,*q 定义了指针,
p,q 是指向整型的指针。
p 取得 a 的地址,而 q 取得 p 的地址
p,q 是指针(也就是一个地址),而*p 和*q 是这个指针指向的整型数值(存
确的赋值语句是()。
0.2345
p
x
B
A. p=x;
B. p=&x;
C. *p=x;
D. *p=&x;
9. 若有说明:int *p, a=1, b; 以下正确的程序段是(B)。
A. p=&b;
B. scanf("%d", &b);
scanf("%d", &p);
*p=b;
C. p=&b;
D. p=&b;
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 所指向的变量
语句是(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 的全称是 memory allocation,中文叫动态内存分配,当无法知道内
}
D. strcpy4( char *p, char *q)
{ while(*p)
*p++=*q++;
}
23.下面程序段的运行结果是(C)。
#include "stdio.h"
main()
{
char s[]="example!", *t;
t=s;
while( *t!='p')
{ printf("%c", *t-32);
C. *&p, *p, &a
D. &a, &*p, p
int *p 是定义一个指针,p=&a ,p 指向 a 的地址,*p=a, *指针名 是指取
该指针所指地址中的内容,&a 为 a 的地址,&*p=&a,p 中放的为 a 的地址
8. 若需要建立如图所示的存储结构,且已有说明 double *p, x=0.2345; 则正
放在这个地址的值)。
A) 把 q 的地址赋给 p,则 p 和 q 完全一样了,都指向一个数 2
B) 把 q 中数据个 p
C) 把 q 中数据给 a
D) a 中数据是 2,不能够给一个地址。除非*q=a
2. 若定义:int a=511, *b=&a;,则 printf("%d\n", *b);的输出结果为:D
A. s 和 t 完全相同
B. 数组 s 中的内容和指针变量 t 中的内容相等
C. s 数组长度和 t 所指向的字符串长度相等
D. *t 与 s[0]相等
20.以下正确的程序段是(B)。
A. char s[20];
B. char *s;
scanf("%s", &s);
scanf("%s", s);
存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存。
18.下面程序段的运行结果是(C)。
char *s="abcde";
s+=2;
printf("%d", s);
A. cde
B. 字符'c' C. 字符'c'的地址 D. 无确定的输出
结果
19.设有如下的程序段:char s[]="girl", *t; t=s;则下列叙述正确的是(D)。
scanf("%d", *p);
*p=a;
A,B 中 p 是 b 的地址 那么如果要输入 b 应该是 scanf("%d", p);
C 中 p 还没定义 给*p 赋值就是给一个没有开辟的地址赋值了
D 是正确的 意思是 p 为 b 的地址,将 p 地址上的数变成 a, 等价于 b=a
10.有如下语句:int m=6, n=9, *p, *q; p=&m; q=&n; 如图 1 所示,若要实现
C. char s[20]=" ", *t="12345"; strcat(s, t);
D. char *s="12345", *t="54321"; strcat (s,t);
P1 P2 是指针,K 是整型变量,变量怎么可以赋值给指针呢?
A 其实是执行了 K=K+K(P1 和 P2 都指向 K,所以*P1 *P2 其实都是指 K)
C 是赋值语句
D 其实执行了 K=K*K
4. 变量的指针,其含义是指该变量的(B)。
A. 值
B. 地址
C. 名
D. 一个标志
5. 若有说明语句:int a, b, c, *d=&c;,则能正确从键盘读入三个整数分别
下图所示的存储结构,可选用的赋值语句是(C)。
p
q
p
q
m
n
m
n
A. *p=*q;
B. p=*q;
C. p=q;
D. *p=q;
11.以下程序中调用 scanf 函数给变量 a 输入数值的方法是错误的,其错误原因
是(B)。
#include <stdio.h> main() {
int *p, *q, a, b; p=&a; printf("input a:"); scanf("%d", *p); … } A. *p 表示的是指针变量 p 的地址 B. *p 表示的是变量 a 的值,而不是变量 a 的地址 C. *p 表示的是指针变量 p 的值 D. *p 只能用来说明 p 是一个指针变量 scanf 后面的参数是地址,是接收的值放到这个地址 12.下面程序的功能是从输入的十个字符串中找出最长的那个串。请在________ 处填空。 #include "stdio.h" #include "string.h" #define N 10 main() { char s[N][81], * t; int j; for (j=0; j<N; j++) gets (s[j]); t= *s; for (j=1; j<N; j++) if (strlen(t)<strlen(s[j])) ___A_____; printf("the max length of ten strings is: %d, %s\n", strlen(t), t);
C. char s[20];
D. char s[20], *t=s;
scanf("%s", &s[2]);
scanf("%s", t[2]);
21.下面程序段的运行结果是(C)。
#include "stdio.h"
main()
{
int m=10, n=20;
char *format="%s, m=%d, n=%d\n";
A. 无确定值
B. a 的地址
C. 512
D. 511
int a=511,*b=&a;
a 是整形变量
b 是整形指针变量,指向 a
printf("%d\n",*b);就是输出指针变量 b,
所指变量的值输出结果 511
3. 已有定义 int a=2, *p1=&a, *p2=&a; 下面不能正确执行的赋值语句是(B)。
相关文档
最新文档