c/c++面试秘笈1

2021-04-09 04:25

阅读:535

标签:全局变量   文件   class   指针   自己的   std   不同   处理   char s   

前言:前一段时间,看了一本剑指offer书籍及程序员面试秘笈

下面将在这里写下最近所看到、所学到的内容,也是温故而知新,完善自己的知识库

1、不使用任何中间变量如何将a,b的值进行交换

#include 

void swap1(int& a, int& b)
{
      int temp = a;  //使用局部变量temp完成交换
      a = b;
      b = temp;
};

void swap2(int& a, int& b)
{
      a = a + b;  //使用加减运算完成交换
      b = a - b;
      a = a - b;
};

void swap3(int& a, int& b)
{
      a ^= b;  //使用异或运算完成交换
      b ^= a;
      a ^= b; 
};

int main(void)
{
      int a1 = 1,b1 = 2;
      int a2 = 3,b2 = 4;
      int a3 = 5,b3 = 6;
      int a = 2147483647,b = 1;

      swap1(a1, b1);
      swap2(a2, b2);
      swap3(a3, b3);

      printf("after swap ... \n");
      printf("a1 = %d, b1 = %d\n", a1, b1);  //测试使用临时变量进行交换的版本
      printf("a2 = %d, b2 = %d\n", a2, b2);  //测试使用加减运算进行交换的版本
      printf("a3 = %d, b3 = %d\n", a3, b3);  //测试使用异或运算进行交换的版本

      swap2(a, b);
      printf("a = %d, b = %d\n", a, b);

      return 0;
}

执行结果:

after swap ...
a1 = 2, b1 = 1;
a1 = 4, b1 = 3;
a1 = 6, b1 = 5;
a1 = 1, b1 = 2147483647

2、c++和c有什么不同

c++是面向对象的语言;它将数据结构和算法看成一个整体叫做算法,可以理解为:对象=数据结构+算法,程序=对象+对象+...
c是面向过程的语言;它核心是功能分解、自顶向下、逐层分解,可理解为:程序=数据结构+算法

3、如何理解c++是面向对象化的,而c是面向过程化的

c是面向过程化的,但是c++不是完全面向对象化的。在c++中也完全可以写出与c一样的过程化的程序,所以只能说c++拥有面向对象的特性。java是真正面向对象化的

4、#include 和#include "head.h"有什么区别

尖括号表明这个文件是一个工程或标准头文件
双引号""是由用户自己写的头文件

5、预处理的使用

#if 0  #endif
#define DEBUG  #ifdef DEBUG  #endif

6、用#define实现宏并求最大值和最小值

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

7、用宏得到一个字的高位和低位字节

#define WORD_LO(xxx) ((byte) ((word)(xxx) & 255))
#define WORD_HI(xxx) ((byte) ((word)(xxx) >> 8))
//一个字由两个字节组成。WORD_LO(xxx)取参数xxx的低8位,WORD_HI(xxx)取参数xxx的高8位

8、用宏得到一个数组所含的元素个数

#define ARR_SIZE(a) ( sizeof((a)) / sizeof((a[0])) )

9、const的使用--找出下面代码中有错的地方

#include 

int main()
{
      const int x = 1;
      int b = 10;
      int c = 20;
      const int* a1 = &b;  // const 修饰指针指向的内容
      int* const a2 = &b;  // const 修饰指针本身
      const int* const a3 = &b;  //const 不但修饰指针本身,而且还修饰指针指向的内容

      x = 2;  //错

      a1 = &c;  //对
      *a1 = 1;  //错
      
      a2 = &c;  //错
      *a2 = 1;  //对
      
      a3 = &c;  //错
      *a3 = 1;  //错

      return 0;
}

10、说明const和#define的特点及区别

#define存在于代码段
const存在于数据段,并在堆栈分配了空间

11、c++中const的使用

1:const用于定义常量:const定义的常量编辑器可以对其进行数据静态类型安全检查(只读)
2:const修斯函数的形式参数,例如:void fun(A a);和void fun(A const &a);后者相对前者提高了效率,如果不叫const可能会改变a的值

12、static有什么作用

1:在函数体内,被声明为静态的变量在这一函数被调用的过程中维持这个值不变
2:在模块内(但在函数体外),被声明为静态的变量可以被模块内所有函数访问,但不能被模块外的其他函数访问,它是个全局变量
3:在模块内,被声明为静态的函数只能被这个模块内的其他函数调用

13、对结构体或类做sizeof运算时要注意并不是简单的将各个成员所占的内存数量相加

计算的时候要考虑字节对齐!!
类型                   在32位机器下       在64位机器下
char                      1                   1
short int                 2                   2
int                       4                   4
long int                  4                   8
long long int             8                   8
char*                     4                   8
float                     4                   4
double                    8                   8

14、使用sizeof计算普通变量所占空间大小(结构体、类对象、含有虚函数的类对象)

//在32位机器下
char str[] = "hello";
char *p = str;
int n = 10;
sizeof(str) = ;  //6
sizeof(p) = ;  //4
sizeof(n) = ;  //4
void func(char str[100])
{
      sizeof(str) = ;  //4
}
void *p = malloc(100);  
sizeof(p) = ;  //4

15、sizeof和strlen有哪些区别

1:sizeof是操作符,strlen是函数
2:直观的理解为,sizeof是求大小,strlen是求字符串长度

c/c++面试秘笈1

标签:全局变量   文件   class   指针   自己的   std   不同   处理   char s   

原文地址:https://www.cnblogs.com/zgjias/p/13372330.html


评论


亲,登录后才可以留言!