C语言—每日选择题—Day67

第一题

1、设有定义: char *p; ,以下选项中不能正确将字符串赋值给字符型指针 p 的语句是()

【多选】

A: p=getchar();

B: scanf("%s",p);

C: char s[]="china"; p=s;

D: *p="china";

答案与解析 A B D

A:错误,getchar是从缓冲区拿一个字符,赋值过去,无法赋值字符串,除非加循环;并且getchar的返回值为int,类型也不匹配;

B:错误,scanf会遇到空格停止,若赋值一个带有空格的字符串,则无法正确赋值;并且p没有分配内存,强行输入会导致野指针;

C:正确;

D:错误,类型错误

第二题

2、下述程序的输出是( )

#include<stdio.h>
int main()
{
    static char *s[] = {"black", "white", "pink", "violet"};
    char **ptr[] = {s+3, s+2, s+1, s};
    char ***p;
    p = ptr;
    ++p;
    printf("%s", **p+1);
    return 0;
}

A: ink

B: pink

C: white

D: hite

答案与解析

第三题

3、若有定义语句: char s[3][10];char (*k)[3];char* p; 则以下赋值语句错误的是( )

1.p = s;
2.p = k;
3.p = s[0];
4.k = s;

A: 124

B: 1234

C: 12

D: 234

答案与解析 A

在没有强制类型转换的情况下,只有类型完全相同的指针才能相互赋值

【p = s】错误:s是一个二维数组名,代表的是第一行的地址,是一个数组指针类型,而p只是一个char*类型,无法赋值;

【p = k】错误:同上;

【p = s[0]】正确:p类型为char*,s[0]表示第一行首元素的地址,类型为char*

【k = s】正确:都是数组指针类型,但s为char (*) [10] ,k为 char (*) [3],类型不同错误 

第四题

4、假设 sizeof(void *) 为4, sizeof(char) 为1,那么对于 char str[sizeof("ab")]

 sizeof(str) 的值是( )

A: 2

B: 3

C: 4

D: 代码无法编译

答案与解析 B 

我们想知道sizeof(str)的值,因为str是数组名,sizeof(str)表示的是整个数组的大小,所以我们必须知道数组有几个元素;

char str[sizeof("ab")],求数组元素个数 -> 求sizeof("ab")

而 sizeof里面求的是类型,所以"ab"的类型为 const char [3];

这里是3的原因:"ab" 字符串末尾有个隐藏的 '\0';

所以sizeof("ab") = 3;

那char str[sizeof("ab")] = char str[3];

所以sizeof(str) = 3;

第五题

5、有如下程序段,则对函数 fun 的调用语句正确的是【多选】( )

char fun(char *);
int main()
{
    char *s = "one";
    char a[5] = {0};
    char (*f1)(char *) = fun;
    char ch;
    return 0;
}

A: *f1(&a);

B: f1(*s);

C: f1(&ch);

D: ch = *f1(s);要改成(*f1)(s)才正确

答案与解析 CD

使用(*f1)(s)与f1(s)效果是相同的

首先明确f1为一个函数指针,相当于fun,那

A:*f1(&a):&a是取出整个数组的地址,类型为char (*) [5],与参数类型不匹配,错误

B:f1(*s) :*s类型为char类型,类型不匹配,错误;

C:f1(&ch):正确

D:因为()的优先级比*高,所以会返回char类型,但是char又被解引用,则错误

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

终将向阳而生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值