• InterView之C/CPP cal


    cal

    #define DOUBLE(x) x+x ,i = 5*DOUBLE(5); i 是多少?

    i 为30。 5 * 5 + 5

    下面关于“联合”的题目的输出?

    A

    //
    // Created by zhangrongxiang on 2018/3/15 11:10
    //
    
    #include <stdio.h>
    union {
        int i;
        char x[2];
    } a;
    
    void main() {
        a.x[0] = 10;
        a.x[1] = 1;
        printf("%d", a.i);
    }
    

    266 低位低地址,高位高地址,内存占用情况是Ox010A

    B

    //
    // Created by zhangrongxiang on 2018/3/15 11:13
    //
    #include <stdio.h>
    
    int main() {
        union {                  /*定义一个联合*/
            int i;
            struct {            /*在联合中定义一个结构*/
                char first;
                char second;
            } half;
        } number;
        number.i = 0x4241;         /*联合成员赋值*/
        printf("%c%c
    ", number.half.first, number.half.second);//AB
        number.half.first = 'a';   /*联合中结构成员赋值*/
        number.half.second = 'b';
        printf("%x
    ", number.i);//6261
        return 0;
    }
    

    AB(0x41对应'A',是低位;Ox42对应'B',是高位)6261(number.i和number.half共用一块地址空间)

    已知strcpy的函数原型:char *strcpy(char *strDest, const char *strSrc)其中strDest 是目的字符串,strSrc 是源字符串。不调用C++/C 的字符串库函数,请编写函数 strcpy。

    Mystrcpy

    //
    // Created by zhangrongxiang on 2018/3/15 11:18
    // File 4
    //
    
    /*
    编写strcpy函数(10分)
    已知strcpy函数的原型是
        char *strcpy(char *strDest, const char *strSrc);
        其中strDest是目的字符串,strSrc是源字符串。
    (1)不调用C++/C的字符串库函数,请编写函数 strcpy
    (2)strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值?
    答:为了 实现链式表达式。                            // 2分
    例如    int length = strlen( strcpy( strDest, “hello world”) );
    */
    
    #include <assert.h>
    #include <stdio.h>
    
    char *Mystrcpy(char *strDest, const char *strSrc) {
        assert((strDest != NULL) && (strSrc != NULL));// 2分
        char *address = strDest;                        // 2分
        while ((*strDest++ = *strSrc++) != '');// 2分
        return address; // 2分
    }
    
    int main() {
        char desc[20] = {0};
        char src[20] = "Hello World";
        Mystrcpy(desc, src);
        printf("%s
    ", desc);
        return 0;
    }
    

    Mystrlen

    //
    // Created by zhangrongxiang on 2018/3/15 16:17
    // File 7
    //
    
    #include <stdio.h>
    #include <assert.h>
    
    int Mystrlen(const char *str) {  // 输入参数const
        assert(str != NULL);  // 断言字符串地址非0
        int len = 0;
        while ((*str++) != '') {
            len++;
        }
        return len;
    }
    
    int main() {
        char str[] = "Hello World";
        printf("%d
    ", Mystrlen(str));//11
        printf("%d
    ", (int) sizeof(str));//12
    }
    

    There are twoint variables: a and b, don’t use “if”, “? :”, “switch”or other judgementstatements, find out the biggest one of the two numbers.

    ( ( a + b ) + abs( a - b ) ) / 2

    如何打印出当前源文件的文件名以及源文件的当前行号?

    cout << __FILE__ ;
    cout << __LINE__ ;
    //__FILE__和__LINE__是系统预定义宏,这种宏并不是在某个文件中定义的,而是由编译器定义的
    

    main主函数执行完毕后,是否可能会再执行一段代码,给出说明?

    可以,可以用_onexit 注册一个函数,它会在main 之后执行int fn1(void), fn2(void), fn3(void),fn4 (void);

    void main( void ){
      String str("zhanglin");
      _onexit( fn1 );
      _onexit( fn2 );
      _onexit( fn3 );
      _onexit( fn4 );
      printf( "This is executed first.
    " );
    }
    
    int fn1(){
      printf( "next.
    " );
      return 0;
    }
    
    int fn2(){
      printf( "executed " );
      return 0;
    }
    
    int fn3(){
      printf( "is " );
      return 0;
    }
    
    int fn4(){
      printf( "This " );
      return 0;
    }
    

    如何判断一段程序是由C编译程序还是由C++编译程序编译的?

    #ifdef __cplusplus
      cout << "c++";
    #else
      cout << "c";
    #endif
    
  • 相关阅读:
    python安装及写一个简单的验证码组件(配合node)
    babel基本用法
    markdown最基本的几种语法
    为什么循环引用会导致“内存泄漏”
    node爬虫进阶版
    算法入门--快速排序
    拓扑排序 --- 判断是否有回路
    拓扑排序 --- 模板题
    数论 --- 找规律
    数论 --- 简单题
  • 原文地址:https://www.cnblogs.com/zhangrxiang/p/8575067.html
Copyright © 2020-2023  润新知