栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【牛客网】每天刷题--第九天

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【牛客网】每天刷题--第九天

目录

1有.以下代码段

2.下列程序,若输入字符串abc,则函数f的功能是将字符串abc转换为*abc输出,请为横线处选择合适的程序( )

3. 以下定义中,指向数组的指针P的是()

4.在一个16位的机器,以下结构由于边界对齐浪费了多少空间() 

5.若一个类中含有纯虚函数,则该类称为() 

6.以下关于指针的说法,正确的是() 

7.程序的输出是() 

8.在Windows 32位操作系统中,假设字节对齐为4,对于一个空的类A,sizeof(A)的值为()?

9.下面有关new/delete和malloc/free的区别,描述错误的是? 


1.有以下代码段
char a[] = {'a','b','c'};
char b[] = {"abc"};

数组a和数组b占用的内存空间大小不一样。请问这句话的说法是正确的吗?

答案:正确。

解析:数组a包含三个元素,数组b包含四个元素,因为字符串加了''。


2.下列程序,若输入字符串abc,则函数f的功能是将字符串abc转换为*abc输出,请为横线处选择合适的程序( )
void f(char str[5]) {
    int i = strlen(str) - 1;
    while (i >= 0) {
        str[i + 1] = str[i];
        i--;
    }
    _________________;
    printf("%sn", str);
}

答案:str[i+1]='*'

解析:很明显是str[0]='*', 但是题中没有这个选项,我们分析之后可以发现执行完while循环之后i的值变为-1,而str[i+1]=str[0]='*',


3. 以下定义中,指向数组的指针P的是()

 答案:A

解析:

        A:数组指针

        B:指针数组

        C:强制类型转换

        D:定义错误

        所以选A

补充:区分int *p[n]; 和int (*p)[n]; 就要看运算符的优先级了。
int *p[n]; 中,运算符[ ]优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组。
int (*p)[n]; 中( )优先级高,首先说明p是一个指针,指向一个整型的一维数组。


4.在一个16位的机器,以下结构由于边界对齐浪费了多少空间() 
struct{
     char a;
     int b;
     char c;
}

 答案:2

解析:

 

本题是16位机器,char型占1个字节,int型占2个字节。

结构体中字节对齐有两条规则:

  1. 数据成员自对齐,即数据成员起始地址为数据类型长度的整数倍,如该题int型b只能从0,2,4...等地址处开始放;
  2. 结构体总长度是结构体中有效对齐值的整数倍,有效对齐值,如该题没明确指出,则为最长数据成员(int b)长度的整数倍;

根据上面两条规则,画出内存示意图。根据规则1,int b从2处开始放,此时结构体总长度为(1 + 1 + 2 + 1 = 5);再根据规则2,结构体总长度应为2的整数倍,故应为6.描红的两个字节表示被浪费的。

5.若一个类中含有纯虚函数,则该类称为() 

答案:抽象类

解析:一个类中存在虚函数,该类就是抽象类。

6.以下关于指针的说法,正确的是() 

答案:C

解析:

那如何区分这几类呢? 带两个const的肯定是指向常量的常指针,很容易理解,主要是如何区分常量指针和指针常量:

一种方式是看 * 和 const 的排列顺序,比如
     int const* p;         //const * 即常量指针
     const int* p;         //const * 即常量指针
     int* const p;         //* const 即指针常量
还一种方式是看const离谁近,即从右往左看,比如
     int const* p; //const修饰的是*p,即*p的内容不可通过p改变,但p不是const,p可以修改,*p不可修改;
     const int* p; //同上
     int* const p; //const修饰的是p,p是指针,p指向的地址不能修改,p不能修改,但*p可以修改;

 


7.程序的输出是() 
void main (void) {
    double x=28;
    int r;
    r= x%5;
    printf ("r=%dn", r);
}

答案:编译错误

解析:%取余运算符只能用于整形 


8.在Windows 32位操作系统中,假设字节对齐为4,对于一个空的类A,sizeof(A)的值为()?

答案:1

解析:类的实例化是在内存中分配一块地址,每个实例在内存中都有独一无二的二地址。同样,空类也会实例化,所以编译器会给空类隐含的添加一个字节,这样空类实例化后就有独一无二的地址了。所以,空类的sizeof为1,而不是0. 多重继承的空类的大小也是1.

9.下面有关new/delete和malloc/free的区别,描述错误的是? 

答案:C D

解析:

malloc/free和new/delete的本质区别:

1.malloc/free 是C/C++语言的标准库函数,new/delete是C++的运算符

2.new 能自动分配空间大小

3.对于用户自定义的对象而言,用malloc/free无法满足动态管理对象的要求

    对象在创建的时候会自动调用构造函数,对象在消亡之前自动执行析构函数

    由于malloc/free是库函数而不是运算符,不在编译器的控制范围,不能把构

    造函数和析构函数的任务强加于malloc/free 。一次C++需要一个能够对对象完

    成动态分配内存和初始化工作的运算符new,以及一个释放内存的运算符

    delete。简单来说就是new/delete能完成跟家详细的对内存的操作,而malloc/

    free不能。

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/856224.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号