什么是函数指针,如何定义函数指针,与指针函数有何区别
参考链接:函数指针和指针函数区别
智能指针
参考链接:智能指针的用法
指针常量和常量指针和常量指针常量
nullptr调用成员函数可以吗?为什么?
能。
原因:因为在编译时对象就绑定了函数地址,和指针空不空没关系。
说说使用指针需要注意什么?
- 定义指针时,先初始化为NULL
- 在使用指针之前,通常应检查它是否为 NULL,以防止访问无效的内存
- 如果分配了动态内存(如使用 malloc、calloc 或 new),确保在不再需要它时释放它(使用 free 或 delete)。否则,会导致内存泄漏。
- 用free或delete释放了内存之后,立即将指针设置为NULL,防止“野指针”
c++指针和引用的区别
- 指针可以被重新赋值指向其他变量,而引用一旦绑定到一个变量上就不能再绑定到其他变量上。
- 指针可以被声明为nullptr,表示指向空地址,而引用必须始终绑定到一个有效的对象上。
- 指针可以进行算术运算,比如加减,以及指针与整数进行加减运算,而引用只能作为变量的别名使用,不能进行算术运算。
- 指针可以指向指针,而引用只能绑定到一个变量上。
传参区别
#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 = # printf("整数变量的值:%d\n", *((int*)p)); p = π printf("双精度浮点数变量的值:%lf\n", *((double*)p)); p = &letter; printf("字符变量的值:%c\n", *((char*)p)); return 0; }
double free什么情况会造成?
"Double free"是一种内存管理错误,通常发生在动态内存分配和释放的情境中。它指的是尝试多次释放同一块内存的错误行为。这种错误可能会导致程序崩溃、不稳定性或数据损坏。
什么是野指针(指针悬挂),如何解决