C/C++工程师面试题(指针篇)

简介: C/C++工程师面试题(指针篇)


什么是函数指针,如何定义函数指针,与指针函数有何区别

参考链接:函数指针和指针函数区别

智能指针

参考链接:智能指针的用法

指针常量和常量指针和常量指针常量

define与const关键字的多种用法-CSDN博客

nullptr调用成员函数可以吗?为什么?

能。

原因:因为在编译时对象就绑定了函数地址,和指针空不空没关系。

说说使用指针需要注意什么?

  1. 定义指针时,先初始化为NULL
  2. 在使用指针之前,通常应检查它是否为 NULL,以防止访问无效的内存
  3. 如果分配了动态内存(如使用 malloc、calloc 或 new),确保在不再需要它时释放它(使用 free 或 delete)。否则,会导致内存泄漏
  4. 用free或delete释放了内存之后,立即将指针设置为NULL,防止“野指针”

c++指针和引用的区别

  1. 指针可以被重新赋值指向其他变量,而引用一旦绑定到一个变量上就不能再绑定到其他变量上。
  2. 指针可以被声明为nullptr,表示指向空地址,而引用必须始终绑定到一个有效的对象上。
  3. 指针可以进行算术运算,比如加减,以及指针与整数进行加减运算,而引用只能作为变量的别名使用,不能进行算术运算。
  4. 指针可以指向指针,而引用只能绑定到一个变量上。

传参区别

#include <iostream>
using namespace std;
void foo(int* ptr) {//指针
    *ptr = 42;
    cout<<"*ptr = "<<*ptr<<endl;//42
}
void foo1(int& ref) {//引用
    ref = 5;
    cout<<"ref = "<<ref<<endl;//5
}
int main() {
    int x = 10;
    int* ptr = &x;
    foo1(x);
    foo(ptr);
    cout<<"x = "<<x<<endl;
    return 0;
}

void *p  (无类型指针)

注意在使用 void * 指针时,为了正确解引用指针并获取其指向的值,需要在使用前进行类型转换。无法进行指针运算

malloc返回的就是void *指针

下面代码中使用了 (int*)(double*)(char*) 分别进行了类型转换。

#include <stdio.h>
int main() {
    // 声明一个 void 指针
    void *p;
    // 声明一些变量
    int num = 10;
    double pi = 3.14159;
    char letter = 'A';
    // 将 void 指针指向不同类型的变量
    p = &num;
    printf("整数变量的值:%d\n", *((int*)p));
    p = &pi;
    printf("双精度浮点数变量的值:%lf\n", *((double*)p));
    p = &letter;
    printf("字符变量的值:%c\n", *((char*)p));
    return 0;
}

double free什么情况会造成?

"Double free"是一种内存管理错误,通常发生在动态内存分配和释放的情境中。它指的是尝试多次释放同一块内存的错误行为。这种错误可能会导致程序崩溃、不稳定性或数据损坏。

什么是野指针(指针悬挂),如何解决

目录
相关文章
|
1天前
|
存储 程序员 C++
深入解析C++中的函数指针与`typedef`的妙用
本文深入解析了C++中的函数指针及其与`typedef`的结合使用。通过图示和代码示例,详细介绍了函数指针的基本概念、声明和使用方法,并展示了如何利用`typedef`简化复杂的函数指针声明,提升代码的可读性和可维护性。
8 0
|
1月前
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
81 2
|
1月前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
81 4
|
2月前
|
存储 安全 编译器
在 C++中,引用和指针的区别
在C++中,引用和指针都是用于间接访问对象的工具,但它们有显著区别。引用是对象的别名,必须在定义时初始化且不可重新绑定;指针是一个变量,可以指向不同对象,也可为空。引用更安全,指针更灵活。
|
2月前
|
存储 C++
c++的指针完整教程
本文提供了一个全面的C++指针教程,包括指针的声明与初始化、访问指针指向的值、指针运算、指针与函数的关系、动态内存分配,以及不同类型指针(如一级指针、二级指针、整型指针、字符指针、数组指针、函数指针、成员指针、void指针)的介绍,还提到了不同位数机器上指针大小的差异。
56 1
|
2月前
|
存储 编译器 C语言
C++入门2——类与对象1(类的定义和this指针)
C++入门2——类与对象1(类的定义和this指针)
40 2
|
2月前
|
编译器 C语言
经典左旋,指针面试题
文章介绍了两种C语言实现字符串左旋的方法,以及如何使用C语言对整数数组进行奇偶数排序。通过实例演示了如何使用函数reverse_part和leftRound,以及在swap_arr中实现数组元素的重新排列。
30 0
|
2月前
|
存储 编译器 程序员
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值(二)
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值
|
20天前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
30 2
|
26天前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
70 5