CPP面试

1. 在传递函数参数时,什么时候该使用指针,什么时候该使用引用呢

  • 需要返回函数内局部变量的内存的时候用指针。使用指针传参需要开辟内存,用完要记得释放指针,不然会内存泄漏。而返回局部变量的引用是没有意义的。
  • 对栈空间大小比较敏感(比如递归)的时候使用引用。使用引用传递不需要创建临时变量,开销要更小。
  • 类对象作为参数传递的时候使用引用,这是C++类对象传递的标准方式。

2. 常量指针和指针常量区别

  • 指针常量是一个指针,读成常量的指针,指向一个只读变量,也就是后面所指明的int const 和 const int,都是一个常量,可以写作int const p或const int p。
  • 常量指针是一个不能给改变指向的指针。指针是个常量,必须初始化,一旦初始化完成,它的值(也就是存放在指针中的地址)就不能在改变了,即不能中途改变指向,如int *const p。

3. a和&a有什么区别

假设数组int a[10]; int (*p)[10] = &a;其中:

  • a是数组名,是数组首元素地址,+1表示地址值加上一个int类型的大小,如果a的值是0x00000001,加1操作后变为0x00000005。*(a + 1) = a[1]。
  • &a是数组的指针,其类型为int (*)[10](就是前面提到的数组指针),其加1时,系统会认为是数组首地址加上整个数组的偏移(10个int型变量),值为数组a尾元素后一个元素的地址。
  • 若(int )p ,此时输出 p时,其值为a[0]的值,因为被转为int *类型,解引用时按照int类型大小来读取。

CPP面试
http://seulqxq.top/posts/15509/
作者
SeulQxQ
发布于
2024年3月5日
许可协议