1901怀化学院KHJ错题集

PTA 错题
结构体
1 . 直接访问就是直接利用变量的地址直接进行访问。T
解:
(1)直接访问:
int a=0;
a=a+1;
这种就属于直接访问变量a这个名字就是你给这块内存取的名字,取a的值的时候就是直接从内存中取出值来
(2)间接访问:
int a=0;
int *p=&a;
*p = (*p)+1;
这种就属于间接访问,p变量的这块内存中存的是a的地址,通过p内存中的地址找到这块内存,取出里边的值,就是间接访问
也就是说:有个中转站的就是间接访问

2.语句int *p,q,r; 定义了3个指针变量。 F
需要全部有 ‘ * ’ Int *不是一体的。

3.语句int *p; *p=50;执行时,不会有任何错误。 F
必须要有一个p的指向变量,p只是一个指针。

4.对于定义int a[10],*p=a; 语句p=a+1;和a=a+1;都是合法的。F
p=a+1可以,a=a+1不行;p=a+1为a[1]的值。

5.调用strcmp函数比较字符串大小时,通常较长的字符串会较大。
两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇’\0’为止。
a<b<c为大小顺序,两个字符串一样返回0,第一个大,返回正整数,第二个大,返回负整数。

6.在定义嵌套的结构类型时,必须先定义成员的结构类型,再定义主结构类型。T

7.下列程序段的输出是____。C
int c[]={1, 3, 5};
int *k=c+1;
printf("%d", ++k);
A.3
B.4
C.5
D.6
只有改地址的时候才用数组的值,值的++就是值的加法,在这种情况下,先用++再用

8.对于以下结构定义,++p->str中的++加在____。A

struct {
int len;
char *str;
} *p;
A.指针str上
B.指针p上
C.str指的内容上
D.以上均不是
当->结束后就会停留在指向的变量。

9.对于如下说明,语法和语义都正确的赋值是_____。C
int c, *s, a[]={1, 3, 5};
A.c=*s;
B.s[0]=a[0];
C.s=&a[1];
D.c=a;
s[0]还未指向A所以错误,*s还未指向变量,所以不能赋值,c和a类型不同。

10.若定义pf为指向float类型变量f的指针,下列语句中__是正确的。 B
A.float f, *pf = f;
B.float f, *pf = &f;
C.float *pf = &f, f;
D.float f, *pf =0.0;
地址要对应地址,并且,定义要在赋值之前。

11.假设scanf语句执行时输入ABCDE<回车>,能使puts(s)语句正确输出ABCDE字符串的程序段是__。D
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);
数组后面有\0占一个字符,所以超内存了,D选项,给s的地址赋值输出地址则是对的。

指针答卷
1.int (*p)[4]它表示p是一个指针数组,它包含4个指针变量元素。 F
表示一个一维数组,*p代表一个地址,与a[4]的a相同。

2.使几个不同的变量共占同一段内存的结构,称为"结构体"类型。 F
共占一段内存的为共同体。

3.C 语言是一种具有某些低级语言特征的高级语言。 T

4.变量被定义后 , 它不仅有一个确定的地址值 , 而且还会有一个确定的本身值。
未被赋值前没有值有地址。

5.变量被定义后 , 它的作用域和寿命就被确定了 , 并且不可改变。T

6.两指针变量相减所得之差是两个指针所指数组元素之间相差的元素个数。T
因为类型相同,所以内存间隔相同,所以地址相减所得的数是元素个数。

7.设变量定义为 int a[2]={1,3}, p=&a[0]+1;,则p的值是( )。B
A.2
B.3
C.4
D.&a[0]+1
因为前面有类型,所以第一个 * 为定义,第二个*为值,所以a[0]的地址+1为a[1]的值。

8.以下结构类型可用来构造链表的是()。B
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;};
记一下,套用结构体要用*。

9.以下不正确的赋值或赋初值的方式是( )。 C
A.char str[]=“string”;
B.char str[7]={‘s’, ‘t’, ‘r’, ‘i’, ‘n’, ‘g’};
C.char str[10];str=“string”;
D.char str[7]={‘s’, ‘t’, ‘r’, ‘i’, ‘n’, ‘g’, ’\0’};
不打\0电脑也会自己加上,str是地址不能赋这个值。

10.以下能对一维数组a进行正确初始化的语句是( )。C
A.int a[10]=(0,0,0,0,0)
B.int a[2]={0,1,2}
C.int a[]={0}
D.int a[]={{}}
注意是花括号不是圆括号,在没定义大小的数组里,第一个0,代表的就是一个0。

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值