错题记录

1.指向数组元素的指针只可指向数组的首元素。
T F
我的答案:t 正确答案:f
题目解析:
指向数组的指针是可以指向数组内其它元素。

2.数组名就是一个指针常量,指向数组的首元素(或者说代表了数组的首地址)。 T
T F
我的答案:t 正确答案:f
题目解析:
数组名和指针的区别(数组名不是指针,是数组首地址)

3.以下数组定义中错误的是( )。

A.int x[][3]={0};
B.int x[2][3]={{1,2},{3,4},{5,6)};
C.int x[][3]={{1,2,3},(4,5,6)};
D.int x[2][3]={1,2,3,4,5,6};

我的答案:C 正确答案:B
题目解析:
二维数组的初始化有以下几种形式:①分行进行初始化;②不分行进行初始化;③部分数组元素进行初始化;④省略第一维的定义,不省略第二维的定义。选项B) 等号右边分了3行,大于等号左边数组的行数2。

4.假设scanf语句执行时输入ABCDE<回车>,能使puts(s)语句正确输出ABCDE字符串的程序段是__。 B

A.char s[5]={“ABCDE”}; puts(s);
B.char s[5]={‘A’, ‘B’, ‘C’, ‘D’, ‘E’}; puts(s);
C.char *s; scanf("%s", s); puts(s);
D.char *s; s=“ABCDE”; puts(s);

我的答案:B 正确答案:D
题目解析:
要正常输出ABCDE必须在字符串的末尾有’\0’作为结束,这样输出函数才知道什么时候终止。
A选项中字符串数组大小为5只能放ABCDE,放不下’\0’了。如果大小为6,会自动在后面补’\0’
B选项与A一样,放不下’\0’
C选项,楼主要知道,字符串读入进来是要存起来的,而s只是个指针,存不下这么多字符。必须是char s[6];scanf("%s",s);puts(s);
D选项是正确的,"ABCDE"作为静态常量存储于程序段,地址赋给s,可以正常输出。

5.有说明语句int a[4][5];,则a[2]+3表示__。 D

A.a数组行下标为2、列下标为3的元素的地址
B.a数组行下标为2、列下标为3的元素的值
C.a数组第2行的首地址
D.a数组第3行的首地址

我的答案:D 正确答案:B

6.对于定义 char str[] = “abc\000def\n”(注:其中0为数字零),求字符串str的长度len和数组str的大小size,len和size分别是: A

A.12 ,13
B.3 ,11
C.3 ,9
D.3 ,4
我的答案:A 正确答案:C
题目解析:
strlen用来求字符串的长度用的
而sizeof是用来求指定变量或者变量类型等所占内存大小用的(需要加上’\0’的位置)
比如strlen(“nihao”)它的结果是5
而sizeof(int)它的结果是2也就是说int型占两个字节
7.以下哪个定义中的p不是指针,请选择恰当的选项: D

A.char **p;
B.char (*p)[10];
C.char *p[6];
D.给出的三项中,p都是指针
我的答案:D 正确答案:C
题目解析:
C为数组指针 其内部的元素才是指针

8.若有定义char (这里有个*)str[]={“Python”, “SQL”, “JAVA”, “PHP”, “C++”}; 则表达式*str[1] > *str[3]比较的是:

A.字符P和字符J
B.字符串SQL和字符串PHP
C.字符串Python和字符串JAVA
D.字符S和字符P
我的答案:B 正确答案:D
题目解析:
*str[1]指的是数组内第二个元素的首个元素
*str[3]指的是数组内第四个元素的首个元素

9.文件指针指向文件缓冲区中文件数据的存取位置。

T F
我的答案:T 正确答案:F
题目解析:
文件指针是指向一个文件的指针,确切的是存放了用文件这个结构体所定义的对象的起始地址,文件指针的移动是指在文件之间来移动。
10.直接访问就是直接利用变量的地址直接进行访问
T F
我的答案:F 正确答案:T
题目分析:
(1)直接访问:
int a=0;
a=a+1;
这种就属于直接访问变量a这个名字就是你给这块内存取的名字,取a的值的时候就是直接从内存中取出值来
(2)间接访问:
int a=0;
int *p=&a;
*p = (*p)+1;
这种就属于间接访问,p变量的这块内存中存的是a的地址,通过p内存中的地址找到这块内存,取出里边的值,就是间接访问

11.int a=5,*p;指针可以加上或减去一个int型数,也可以加上一个指针。
T F
我的答案:F 正确答案:T
题目解析:
指针变量不能相加、相乘或相除,如果两个指针变量指向的是同一块连续空间中的不同存储,则可以相减。指针变量的相加完全没有任何意义。

12.定义FILE *fp; 则文件指针fp 指向的是()。

A.文件在磁盘上的读写位置
B.文件在缓冲区上的读写位置
C.整个磁盘文件
D.文件类型结构体
我的答案:C 正确答案:D
题目解析:
因为fp是一个指针变量,它指向这个变量类型的地址,即FILE 变量的地址。

13.缓冲文件系统的文件缓冲区位于()。

A.磁盘缓冲区中
B.磁盘文件中
C.内存数据区中
D.程序文件中
我的答案:D 正确答案:C
题目解析:
文件缓冲区是用以暂时存放读写期间的文件数据而在内存区预留的一定空间。

14.直接使文件指针重新定位到文件读写的首地址的函数是() 。

A.ftell()函数
B.fseek()函数
C.rewind()函数
D.ferror()函数
我的答案:B 正确答案:C
题目解析:
A中ftell() 函数用于得到文件位置指针当前位置相对于文件首的偏移字节数;
B中fseek()函数用于设置文件指针的位置;
C中rewind()函数用于将文件内部的位置指针重新指向一个流(数据流/文件)的开头;
D中ferror()函数可以用于检查调用输入输出函数时出现的错误。

15.下列关于C语言数据文件的叙述中正确的是____。

A.文件由ASCII码字符序列组成,C语言只能读写文本文件
B.文件由二进制数据序列组成,C语言只能读写二进制文件
C.文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件
D.文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件
我的答案:C 正确答案:D
题目解析:
文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件,ASCII文件又称文本文件,它的每一个字节代表一个字符。二进制文件是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。

16.函数fgetc的作用是从指定文件读入一个字符,该文件的打开方式必须是( )。

A.只写
B.追加
C.读或读写
D.答案B和C都正确
我的答案:C 正确答案:D
题目分析:
fgetc 函数是指从指定的文件读入一个字符,该文件必须是以读或读写方式打开的。fgetc函数的调用形式为: ch=fgetc(fp);。

17.利用函数fseek可实现的操作是( )。

A.改变文件指针fp的值
B.文件的顺序读写
C.文件的随机读写
D.以上答案均正确
我的答案:C 正确答案:D
题目解析:
fseek()函数的功能是:改变文件的位置指针;辅助实现文件的顺序读写;辅助实现文件的随机读写。

18.可以用一个指针变量指向一个函数,然后通过该指针变量调用此函数。
T F
我的答案:F 正确答案:T
题目解析:
函数在编译时会被分配给一个入口地址, 而指针变量用于存放地址(指针), 所以可以使用指针来指向函数并调用该函数, 这个指针就是函数指针 .

19.若p1、p2都是整型指针,p1已经指向变量x,要使p2也指向x, ( )是正确的。

A.p2 = p1;
B.p2 = **p1;
C.p2 = &p1;
D.p2 = *p1;
我的答案:B 正确答案:A

20.根据声明int (*p)[10], p是一个( )。

A.数组
B.指针
C.函数
D.数组的元素
我的答案:B 正确答案:A
题目解析:
p是个数组。该数组的元素为指向指针的指针。被指向的指针指向整型元素。
简单的说p是个指针不合适,数组名是个常量,为数组的首地址。数组名含有数组的长度等信息,比如sizeof§。

21.以下结构类型可用来构造链表的是()。

A.struct aa{ int a;int * b;};
B.struct bb{ int a;bb * b;};
C.struct cc{ int * a;cc b;};
D.struct dd{ int * a;aa b;};
我的答案:A 正确答案:B
题目解析:
如果要构造链表,则必须有指向下一个结点的指针。

22.若有说明:int n=2,*p=&n,*q=p;则以下非法的赋值语句是。

A.p=q;
B.*p=q;
C.n=q;
D.p=n;
我的答案:C 正确答案:D
题目解析:
本题中首先定义了一整型变量n并赋初值为2,接着定义了一个整型指针变量p并让它指向n,接着又定义了一指向指针的指针变量q。选项A中给指针变量p赋值q,故这个赋值语句正确。选项B中
p=q就是将q的值赋给指针变量p所指向的变量n,故这个赋值语句不是非法的赋值语句。选项C中是将
q的值赋给变量n,故这个表达式不是非法的赋值语句。选项D中p为一指针变量,应该将一地址赋给它,而在此选项的表达式中将变量n而不是n的地址赋给它,故这个表达式不合法。

23.在一个以 h 为头的单向链表中,p 指针指向链尾的条件是()。

A.p->next=h
B.p->next=NULL
C.p->next->next=h
D.p->.data=-1
我的答案: C 正确答案: A
题目解析:
首先链表为不带头结点的,然后循环链表首尾相连即尾的next指向了头,如果要求p指向尾,则肯定有p->next=h

24.在一个单链表head中,若要删除指针p所指结点的后继结点,则执行()。

A.p=p->next;free§;
B.p->next=p->next->next; free§;
C.q= p->next q->next=p->next; free(q);
D.q=p->next; p->next=q->next; free(q);
我的答案:B 正确答案:A
题目解析:
链表是用一组任意的存储单元来存放线性表的结点.在存储的每个结点值的同时,还存储了其后继结点的指针,另外还有头指针。单链表的指针域只有一个指向后继结点的指针,若要删除p结点的后继结点,只需让P结点的指针p->next指向其后继结点指针所指向的结点p->next->next即可。

25.根据声明int a[10], *p=a; ,下列表达式错误的是( )。

A.a[9]
B.p[5]
C.a++
D.*p++
我的答案:D 正确答案:C
题目解析:
a 是常量 不能自增。

  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值