每天被面试虐一点点(一)

1.如果MyClass为一个类,执行”MyClass a[5], *b[6]”语言会自动调用该类构造函数的次数是5

        MyClass a[5],会创建5个对象,所以会自动调用5次构造函数,但是MyClass *b[6],这不会自动调用构造函数,因为这是声明一个指向6个元素的数组的指针,指针声明的时候是不分配空间的,所以不会调用构造函数,没有指向一个有效的内存空间。

2.这段代码彻底坑死人了,我在windown64,VC++32可以运行出来,但是就是在linux下的gcc运行不出来,肯定与编译器和环境有关系了,如果在linux下记得在main函数中加入struct st_t st[16],如果要打印结构体大小,请sizeof(struct st_t),不然编译器识别不出来。

struct st_t  
{
  int status;
  short *pdata;
  char errstr[32];
};
 
st_t st[16];
char *p = (char *)( st[2].errstr + 32 );
printf( "%d", ( p - (char *)(st) ) );

3. void *memset(void *s, int ch, size_t n);  函数解释:将s中前n个字节 (typedef unsigned int size_t )用ch替换并返回s.作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法,通常为新申请的内存做初始化工作.刚开始还犯了一个很严重的错误,char *str ="qwertyuioplkjhgfdsaz";常量区不能被修改

#include <stdio.h>
#include <string.h>
int main(int argc,char *argv)
{
    char s[] = "Golden Global View";

    printf("before %s\n",s);
    memset(s,'\0',6);
    printf("after %s\n",s);
    
    return 0;
}

4.这段代码只要注意b就好,它修改的不是指针指向的值,而是改变的是指针本身的地址

void foobar(int a, int *b, int **c)
{
    int *p = &a;
    *p = 101;
    *c = b;
    b = p;
}
 
int main()
{
    int a = 1;
    int b = 2;
    int c = 3;
    int *p = &c;
    foobar(a, &b, &p);
    printf("a=%d, b=%d, c=%d, *p=%d\n", a, b, c, *p);
    return (0);
}



5 另一个基本的c语言问题
unsigned char *p1;
  unsigned long *p2;
  p1=(unsigned char *)0x801000;
  p2=(unsigned long *)0x810000;
  请问p1+5= ; p2+5= ;
就是一个指针加法中1代表什么的问题  1代表的是一个单位量
p1+5=p1+5*1=p1+5*sizeof(unsigned char)=p1+5*1=0x801000+ox5=0x801005
p2+5=p2+5*1=p2+5*sizeof(unsigned long)=p1+5*4=0x810000+20=0x810000+0x14=0x810014


6

class A {
...
private:
     int a;
};
class B  : public A {
...
private:
     int a;
public:
     const int b;
     A &c;
     static const char* d;
     B* e;
}

则构造函数中,成员变量一定要通过初始化列表来初始化的是b和c

引用,const成员变量,基类构造函数 一定要通过初始化列表来实现。 static类型不是类成员,不需要通过初始化列表来初始化

7.下列关于虚函数的说法正确的是(CD)

      A在构造函数中调用类自己的虚函数,虚函数的动态绑定机制还会生效在

     B析构函数中调用类自己的虚函数,虚函数的动态绑定机制还会生效

     C静态函数不可以是虚函数

     D虚函数可以声明为inline

解析:static 成员函数不能声明为虚函数,为什么?不能被重写呗,虚函数是可以被重写的,静态函数是类的,static 成员函数 是属于类的 没有this, 所有类的对象共有virtual 必须有this的感念,根据this的实际 class 来决定如何调用,因为静态成员函数没有this指针,同时其函数的指针存放也不同于一般的成员函数,其无法成为一个对象的虚函数的指针以实现由此带来的动态机制。静态是编译时期就必须确定的,虚函数是运行时期确定的。,inline函数和virtual函数有着本质的区别,inline函数是在程序被编译时就展开,在函数调用处用整个函数体去替换,而virtual函数是在运行期才能够确定如何去调用的,因而inline函数体现的是一种编译期机制,virtual函数体现的是一种运行期机制。虚函数可以声明为inline,但是编译器会忽略inline属性。



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值