牛客网C/C++笔试题整理

来源:互联网 发布:菲凡网络 编辑:程序博客网 时间:2024/06/05 05:00
1.
int *p1 = new int[10]; 
int *p2 = new int[10]();
p1申请的空间里的值是随机值,p2申请的空间里的值已经初始化关于new的使用:
(1).new单个对象
new在自由空间分配内存,但其无法为其分配的对象命名,因次是无名的,分配之后返回一个指向该对象的指针。

int *pi = new int;// pi指向一个动态分配的,未初始化的无名对象
此new表达式在自由空间构造一个int类型对象,并返回指向该对象的指针。
默认情况下,动态分配的对象是默认初始化的,这意味着内置类型或组合类型的对象的值是无定义的,而类类型对象将用默认构造函数进行初始化
(2).new(多个对象)数组
new分配的对象,不管单个对象还是多个对象的分配,都是默认初始化。但可以对数组进行值初始化,方法就是:在大小之后添加一对空括号。
int *pia = new int[10];    // 10个未初始化int
int *pia2 = new int[10]();// 10个值初始化为0的int



2.下面的程序可以从0....n-1中随机等概率的输出m个不重复的数。这里我们假设n远大于m
knuth(intn,int m)
    srand((unsignedint)time(0)); 
    for(inti = 0; i < n; i++) { 
        if( ) { 
            cout << i << endl;
            ( );
        }
     }
}
正确答案:rand()%(n-i)<m   m--



3.以下prim函数的功能是分解质因数。括号内的内容应该为?
void prim(int m, int n)
 {
     if(m >= n)
     {
         while(        ) n++;
         (     );
         prim(m, n);
         cout << n << endl;
     }
 }
正确答案:m%n m/=n
余数为零才能跳出while循环



4.函数外部问x等于什么?
enum string{    
    x1,    
    x2,    
    x3=10,    
    x4,    
    x5,    
} x;
正确答案:x=0
如果是函数外定义,那么是0
如果是函数内定义,那么是随机值,因为没有初始化



5.
unsigned char*p1;
unsigned long*p2;
p1=(unsigned char *)0x801000;
p2=(unsigned long *)0x810000;
请问p1+5= 什么?
p2+5= 什么?
正确答案:801005   810014
这里的long是4个字节 4*5=20,再转化为16进制数 0x14。
char是1个字节。1*5=5, 0x05



6.在32位机器中,如下代码的输出是?
void example(char acWelcome[]){
    printf("%d",sizeof(acWelcome));
    return;
}
void main(){
    characWelcome[]="Welcome to Huawei Test";
    example(acWelcome);
    return;
}
正确答案:4

void example(char acWelcome[]) {
    printf("%d",sizeof(acWelcome));
    return;
}
int main() {
    characWelcome[] ="Welcome to Huawei Test";
    example(acWelcome);
    printf("\n%d\n",sizeof(acWelcome));
    return0;
}
此时输出为:
4
23
数组名作为函数参数传递时,数组名退化成指针,传递过去的其实是数组的首地址





























0 0