zoukankan      html  css  js  c++  java
  • C/C++基础面试题整理

    1.sizeof

    sizeof(0) == sizeof(int)
    sizeof(0L) == sizeof(long)
    sizeof(0LL) == sizeof(long long)
    
    int array[5]; sizeof(array) == sizeof(int) * 5

    2.大端小端

    大端低字节高地址,高字节低地址;小端低字节低地址,高字节高地址(TCP/IP)采用大端

    某32位数据在内存中的布局为(左为低地址)

    大端读数为0x12345678;小端读数为0x78563412

    4.结构体和数组当作参数传递到函数

    结构体会拷贝一个副本给函数,在函数内的修改对原始数据不产生影响;

    数据传递的是首地址,函数内的修改对原始数据有影响。

    5.C宏

    定义一年有几秒(忽略瑞年)

    #define SECONDS_PER_YEAR (365 * 24 * 60 * 60)UL

    二数求小的宏

    #define MIN(x, y) ((x) > (y) ? (y) : (x))

     

    6.C中基本类型的定义

    a) int a; // An integer 
    
    b) int *a; // A pointer to an integer 
    
    c) int **a; // A pointer to a pointer to an integer 
    
    d) int a[10]; // An array of 10 integers 
    
    e) int *a[10]; // An array of 10 pointers to integers 
    
    f) int (*a)[10]; // A pointer to an array of 10 integers 
    
    g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer 
    
    h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer

     

    7.关键字static的作用

    1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。

    2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。

    3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。

    4). 在类内,静态函数表示不需要实例就可以调用

     

    8. 引用与指针的区别

    1) 引用必须被初始化,指针不必。

    2) 引用初始化以后不能被改变,指针可以改变所指的对象。

    2) 不存在指向空值的引用,但是存在指向空值的指针.

     

    9.死循环的写法

    1while(1){}
    
    2) for(;;){}
    
    3)Loop:{}goto Loop;

    10.C++ String类的实现

    #include <iostream>
    
    #include <string.h>
    
    using std::ostream;
    
    class String {
        friend ostream& operator<<(ostream& out, const String& str);
    
        public:
            String(const char* str);        //Constuctor
            String(const String& other);        
            ~String(void);
            String& operator=(const String& other);
            char* data(void) const;
        private:
            ostream& Print(ostream& out) const;
            char* _data;
    };
    
    ostream& operator<<(ostream& out, const String& str)
    {
        return str.Print(out);
    }
    
    String::String(const char* str)
    {
        if (str == NULL) {
            _data = new char[1];
            // if _data == NULL throw Exception
            _data[0] = '';
        } else {
            size_t len = strlen(str);
            _data = new char[len + 1];
            // if _data == NULL throw Exception
            strcpy(_data, str);
        }
    }
    
    String::~String(void)
    {
        delete[] _data;
    }
    
    String& String::operator=(const String& other)
    {
        if (this != &other) {
            delete[] _data;
            size_t len = strlen(other.data());
            _data = new char[len + 1];
            // if _data == NULL throw Exception
            strcpy(_data, other.data());
        }
        return *this;
    }
    
    char* String::data(void) const
    {
        return _data;
    }
    
    ostream& String::Print(ostream& out) const
    {
        out << _data;
        return out;
    }

     11. C++ new

    new函数可以重载;

    new操作符不可以重载。

    12. 枚举

    枚举只能是整型,值会自动连续

     enum e {
             A = -5,
             B,
             C = 3, 
             D, 
             E = -8, 
             F};
     printf("%d, %d, %d, %d, %d, %d", A, B, C, D, E, F);
    
    // 输出-5 -4 3 4 -8 -7

     13.memcpy, memmove, strcpy 实现

    void* memcpy(void* dest, const void* src, size_t n)
    {
          char* d = (char*) dest;
          const char* s = (const char*) src;
          
          while (n--)
                *d++ = *s++;
          return dest;
    }
    
    void* memmove(void* dest, const void* src, size_t n)
    {
          char* d = (char*) dest;
          const char* s = (const char*) src;
          
          if (s > d) {            // start at beginning of s
                while (n--)
                      *d++ = *s++;
          } else if (s < d) {     // start at end of s
                 d = d + n - 1;
                 s = s + n - 1;
                 while (n--)
                       *d-- = *s--;
          }
          return dest;
    }
    
    char* strcpy(char* dest, const char* src)
    {
          assert(dest);
          assert(src);
          char* d = dest;
          const char* s = src;
          
          while (*str != '')
                *d++ = *s++;
          *d = '';
          return dest;
    }
  • 相关阅读:
    WCF 第十三章 可编程站点 为站点创建操作
    WCF 第十三章 可编程站点 所有都与URI相关
    WCF 第十二章 对等网 使用自定义绑定实现消息定向
    WCF 第十三章 可编程站点 使用WebOperationContext
    Using App.Config for user defined runtime parameters
    WCF 第十三章 可编程站点
    WCF 第十三章 可编程站点 使用AJAX和JSON进行网页编程
    WCF 第十二章 总结
    WCF 第十三章 可编程站点 使用WebGet和WebInvoke
    WCF 第十三章 可编程站点 URI和UriTemplates
  • 原文地址:https://www.cnblogs.com/Leo-Forest/p/3130451.html
Copyright © 2011-2022 走看看