niusouti.com
【原创作品】跨函数使用内存的问题试题【资料下载】

程序中已构成如下图所示的不带头结点的单向链表结构,指针变量s、p、q均已正确定义,并用于指向链表结点,指针变量s总是作为头指针向链表的第—个结点。

若有以下程序段 q=s; s=s->next; p=s; while(p->next) p=p->next; P->next=q; q->next=NULL; 该程序段实现的功能是______。

A.首结点成为尾结点

B.尾结点成为首结点

C.删除首结点

D.删除尾结点


正确答案:A
解析:根据语句q=s得知指针q指向结点a;由s=s->next;p=s得知指针p和s均指向接点b;在满足while语句的情况下,抽行p=p->next;得知p现在指向结点c;由p->next=q得知p指向的结点是a,a移到c的后面;由q->next=NULL得知结点a与结点b的指针断开。移动后的结构图如图所示:


以下程序中,能够通过调用函数fun,使main函数中的指针变量p指向一个合法的整型单元的是

A.main( ) { int *p; fun(p); ┆ } int fun(int *p) { int s; p=&s;}

B.main( ) { int *p; fun(&p); ┆ } int fun(int **p) { int s; *p=&s;}

C.#include<stdlib.h> main( ) { int *p; fun(&p); ┆ } int fun(int **p) { *p=(int*)malloc(2);}

D.#include<stdlib.h> main( ) { int *p; fun(p); ┆ } int fun(int *p) { p=(int*)malloc(sizeof(int));}


正确答案:D


设线性链表中结点的结构为(data,next)。已知指针q所指结点是指针结点p的直接前驱,若在*q与*p之间插入结点*s,则应执行下列()操作。

A.s->next=p->next;p->next=s;

B.q->next=s;s->next=p;

C.p->next=s->next;s->next=p;

D.p->next=s;s->next=q;


正确答案:B


以下程序段中,能够通过调用函数fun(),使main()函数中的指针变量p指向一个合法的整型单元的是( )。

A.main() {int*p; fun(p); … } int fun(int*p) {int s; p=&s; }

B.main {int*p fun(&p); … } iht fun(int**p) {int s; *p=&s;}

C.main() {int*p; fun(&p); } int fun(int**p) {*p=(int*)malloc(2);}

D.main() {int*p; fun(p); } int fun(int*p) {p=(int*)malloc(sizeo(int));}


正确答案:C
解析:在选项A中,main()函数中定义了一个指针变量p,调用fun()函数时把p传给形参p,在函数中让p指向局部变量s,由于函数调用返回后,局部变量s将被释放,因此无法实现让实参p指向一个整型单元,故选项A错误。选项B中实现的也是让实参p,指向一个在函数fun()中定义的局部变量s,因此也是错误的;选项C在函数fun()中分配了两个字节的内存单元并把首地址赋值给形参p指向的变量,即main()函数的指针变量p中,由于整型变量占两个字节,因此,选项C是正确的;选项D在主函数中定义了一个指针地址变量p,并把指针变量的值传给形参变量p,在fun()函数中分配了一个整型单元并把首地址赋值给行参指针变量p,由于C语言中变量作为参数是传值的,所以并没有改变对应实参指针变量的值,因此选项D也是错误的。所以,C选项为所选。


以下程序段中,能够通过调用函数fun,使main函数中的指针变量p指向一个合法的整型单元的是______。

A.main() { int *p; fun(p); …… } int fun(int *p) {int s; p=&s;}

B.main() { int *p; fun(&p); …… } int fun(int **p) {int s; *p=&s;}

C.# include<stdlib. h> main() {int *p; fun(&p); …… } int fun(int **p) {*p=(int *)malloc(2);}

D.# include<stdlib. h> main() { int *p; fun(p); …… } int fun(int *p) {p=(int *)malloc(sizeof(int));}


正确答案:C
解析:选项A和B中p指向局部变量s的地址,退出函数fun后,该局部变量也被释放,不能使p指向一个整型单元地址;选项D中通过malloc函数分配一个整型地址,但不能被返回到main函数中,因为指针参数指向的地址不能被改变;选项C中,p是指向指针的指针,函数fun改变的是其指向的内容,而不是其地址。


下程序中,能够通过调用函数 数中的指针变量 p 指向一个合法的整型单元的是 A) p; p); p) s; p=&s; B) p; p); *q) s; *q=&s; C) # p; p); *q) *q=(); D) # *p; p); p) p=(); 2003 年 4 月 45 题 注释: 这个题很有意思。考查了: 1) 指针的指针的使用 2) 动态内存分配与自动变量的内存分配。 动态分配的内存必须调用 函数才能释放,而自动变量一旦跳出它的代码作用范围,就会由编译器自动释放掉。 让我们先看: A) 选项无论 中 不会影响到主函数中 为它是值传递 B) 选项倒是把 函数,但遗憾的是,由于 s 是个自动变量,当推出 函数后, s 变量所占内存单元会被会被释放掉,此时主函数中的 p 还是没法指向一个合法的 单元 C) 选项 的形参 *p;表明 p 是个指向指针变量的指针变量,即是个指针的指针。 而主函数中的 p; 表明 &p, &参和形参类型一致。 的功能是使实参 变量, 又由于该 变量是由 动态分配的,所以推出 函数并不会影响实参 故C 是对 D) 选项犯了和 真想不到二 哈 !

在一个单链表中,若q结点是p结点的前驱结点,若在q与p之间插入结点s,则执行( )。

A.s→link=p→dink; p→link=s

B.p→link=s; s→link=q

C.p→link=s→4ink; s→link=p

D.q→link=s; s→link=p


正确答案:D
解析:在单链表中插入一个元素需要执行以下步骤:首先将待插入节点的前驱结点的指针域指向待插入节点,然后将待插入节点的指针域指向待插入节点的前驱结点原先的后继节点。


在一个单链表中,q结点是p结点的前驱结点,若在q与p之间插入结点s,则执行(29)。

A.s→link=p→link;p→link=s;

B.p→link=s;s→link=q;

C.p→link=s→link;s→link=p;

D.q→link=s;s→link=p;


正确答案:D
解析:q结点是p结点的前驱结点,若在q与p之间插入结点s,只需先将q的指针指向s,然后再将s指向p即可。


以下程序中,能够通过调用函数fun,使main函数中的指针变量p指向一个合法的整型单元的是

A.main() { int *p; fun(p); … } int fun(int *p) { ints; p=&s;}

B.main() { int *p; fun(&p); … } int fun(int **p) { int s; *p=&s;)

C.#include main() { int *p; fun(&p); … } int fun(int **p) *p=(int*)malloc(2);}

D.#include main() { iht *p; fun(p); … } iht fun(iht *p) { p=(int*)malloc(sizeof(int)); }


正确答案:C
解析:本题考核的知识点是指针变量作为函数的参数以及变量的作用域。在选项A中,main()函数中定义了一个指针变量p,调用fun()函数时把p传给形参p,在函数中让p指向局部变量s,由于函数调用返回后,局部变量s将被释放,因此无法实现让实参p指向一个整型单元,故选项A错误.选项B中实现的也是让实参p,指向一个在函数fun()定义的局部变量s,因此也是错误的;选项C在函数fun()中分配了两个字节的内存单元并把首地址赋值给形参p指向的变量,即main()函数的指针变量p中,由于整型变量占两个字节,因此,选项C是正确的;选项D在主函数中定义了一个指针地址变量p,并把指针变量的值传给形参变量p,在fun()函数分配了一个整型单元并把首地址赋值给行参指针变量p,由于C语言中变量作为参数是传值的,所以并没有改变对应实参指针变量的值,因此选项D也是错误的.所以,C选项为所选。


以下程序段中,能够通过调用函数fun,使main函数中的指针变量p指向一个合法的整型单元的是

A.main() { int*p; fun(p); … } int fun(int*p) {int s; p=&s; }

B.main { int *p; fun(&p); … } int fun(int**p) {int s; *p=&s; }

C.#include <stdlib.h> main() { int *p; fun(&p); … } int fun(int**p) {*p=(int*)malloc(2); }

D.#include <stdlib.h> main() { int *p; fun(p); … } int fun(int *p) {p=(int*)malloc(sizeof(int));}


正确答案:C


设指针q指向单链表中结点A,指针p指向单链表中结点A的后继结点B,指针s指向被插入的结点X,则在结点A和结点B插入结点X的操作序列为()。

A.p->next=s;s->next=q;
B.q->next=s;s->next=p;
C.p->next=s->next;s->next=p;
D.s->next=p->next;p->next=-s;

答案:B
解析:
插入s结点,应使s的next指针指向p结点,使q结点的next指针指向s。

更多 “【原创作品】跨函数使用内存的问题试题【资料下载】” 相关考题
考题 在一个单链表中,己知指针q所指向的结点是指针P所指向的结点的前趋结点,若在指针q和p所指向的两个结点之间插入指针s指向的结点,则执行()A、 p->next=s;s->next=qB、 q->next=s;s->next=pC、 S->next=p->next;p->next=sD、 p->next=s->next;s->next=q正确答案:B

考题 下列推理形式中,无效的有()。A、((p∨~q)∧q)→~pB、((p∧q)∧r)→(p∧r)C、((~p→q)∧q)→~pD、((p→q)∧(r∧p))→qE、(p→q)∧(r→s)∧(q∨s))→(p∨r)正确答案:A,C,E

考题 问答题试判断以下各式是否为重言式。  (1)(P→Q)→(Q→P)  (2)P→(P→Q)  (3)Q→(P→Q)  (4)(P∧Q)→(P→Q)  (5)((P→Q)∨(R→Q))→((P∨R)→Q)  (6)((P→Q)∨((R→S))→((P∨R)→(Q∨S))正确答案:(1)否。 (2)是。 (3)是。 (4)是。 (5)否。 (6)否。 重言式(Tautology)又称为永真式,永真式的取值恒为真,所以如果式子的结果为真,则是重言式,否则不是重言式。根据真值表可以快速判断出式子是否为重言式。解析:暂无解析

考题 单选题在以下二难推理中,无效式是()A (((p→q)∧(r→s))∧(p∨r))→(q∨s)B (((p→q)∧(r→s))∧(∨)C ((p→q)∧(p→r))∧(∨))→pD (((p→q)∧(r→q))∧(p∨r))→q正确答案:A解析:暂无解析

考题 在一个单链表中,己知指针q所指向的结点是指针P所指向的结点的前趋结点,若在指针q和p所指向的两个结点之间插入指针s指向的结点,则执行()A、 p->next=s;s->next=qB、 q->next=s;s->next=pC、 S->next=p->next;p->next=sD、 p->next=s->next;s->next=q正确答案:B

考题 在下列选言推理形式中,无效的有()。A、(p∨q)∧p├﹁qB、(pqr)∧﹁p├q∧rC、(pqr)∧﹁p├qrD、(p∨q∨r)∧﹁p├q∨rE、(p∨q∨r∨s)∧(﹁p∧﹁q)├r∨s正确答案:A,B

考题 单选题在一个单链表中,己知指针q所指向的结点是指针P所指向的结点的前趋结点,若在指针q和p所指向的两个结点之间插入指针s指向的结点,则执行()Ap->next=s;s->next=qBq->next=s;s->next=pCS->next=p->next;p->next=sDp->next=s->next;s->next=q正确答案:B解析:暂无解析

考题 在一个单链表中,已知q结点是p结点的前趋结点,若在q和p之间插入s结点,则须执行()A、s->next=p->next;  p->next=s B、q->next=s;  s->next=p C、p->next=s->next;  s->next=p D、p->next=s;  s->next=q正确答案:B

考题 设指针q指向单链表中结点A,指针p指向单链表中结点A的后继结点B,指针s指向被插入的结点X,则在结点A和结点B插入结点X的操作序列为()。A.p->next=s;s->next=q; B.q->next=s;s->next=p; C.p->next=s->next;s->next=p; D.s->next=p->next;p->next=-s;答案:B解析:插入s结点,应使s的next指针指向p结点,使q结点的next指针指向s。

考题 在以下二难推理中,无效式是()A、(((p→q)∧(r→s))∧(p∨r))→(q∨s)B、(((p→q)∧(r→s))∧(∨)C、((p→q)∧(p→r))∧(∨))→pD、(((p→q)∧(r→q))∧(p∨r))→q正确答案:C