您已经熟悉如何创建指针:int * ptr = nullptr(请记住始终初始化指针)。要为变量分配空间,您将使用“new”关键字,后跟数据类型。例如,int * ptr = new int,或者如果已经创建了指针,则可以使用ptr = new int。现在,新分配的地址已保存在指针中,并且可以通过用*取消引用指针来轻松访问。 下面是获取要输入到数组...
int *ptr = new int[5]; delete [ ]ptr; // 执行完delete后,ptr野指针 //还应该这样做:ptr=NULL; 正确 } 3、指针操作超越了作用域,如果在一个程序块中让一个指针指向那个块中的某个变量,但是那个变量只是在块中有效,出了那个程序块,此变量就无效了,此时指向它的指针也就变成了野指针 void func() {...
std::unique_ptr<int> ptr(new int); // 当离开这个作用域时,ptr会自动释放内存 } 另一个智能指针是std::shared_ptr,它允许多个智能指针指向同一个对象。当最后一个std::shared_ptr离开作用域时,它会自动释放所管理的内存。 代码如下: 代码语言:c++ 复制 #include <memory> void func() { std::shared_...
1)new int; //开辟一个存放整数的存储空间,返回一个指向该存储空间的地址。int *a = new int 即为将一个int类型的地址赋值给整型指针a 2)int *a = new int(5) 作用同上,但是同时将整数空间赋值为5 2.开辟数组空间 对于数组进行动态分配的格式为:指针变量名=new 类型名[下标表达式];delete...
typedef int*PTRINT; 以上就是给int *起了一个新的名字NEW_INT。可定义int类型指针变量如: 代码语言:javascript 代码运行次数:0 复制 Cloud Studio代码运行 PTRINTx; 此时PTRINT x等同于int *x。 例: 3、对于结构体的使用 在声明结构体时可为结构体和结构体指针起别名,如: ...
ptr3指向的是一个大小为10个int,也就是40(32位)个字节、未初始化的对象; delete:如果有申请指定大小的空间,需要使用[]。 对于内置类型,new和delete的使用比使用malloc函数和free一样,只是形式上不同。 2.2 对于自定义类型 对于自定义类型,new和delete最大的不同就是它们会分别调用对象的构造函数和析构函数。
智能指针 shared_ptr 和 new结合使用 用make_shared函数初始化shared_ptr是最推荐的,但有的时候还是需要用new关键字来初始化shared_ptr。 一,先来个表格,唠唠new和shared_ptr 二,智能指针和普通指针一起使用的陷阱 voidpro(shared_ptr<int> ptr){
auto_ptr、unique_ptr、shared_ptr 和weak_ptr。其中,auto_ptr 在C++11已被摒弃,在C++17中已经移除不可用。 首先是为什么要引入智能指针呢?看下一段代码: ClassName *p = new ClassName(); p -> func(); delete p; 这一段代码是我们经常能够看到的功能代码。 而其中存在的问题就在于在使用结束后常常忘记...
int* ptr3 = (int*)realloc(ptr2, sizeof(int) * 4); free(ptr1); free(ptr3); } 1. 选择题: 选项: A.栈 B.堆 C.数据段 D.代码段 globalVar在哪里?___ staticGlobalVar在哪里?___ staticVar在哪里?___ localVar在哪里?___ num1 ...
1、int*ptr;: 指针所指向的类型是int 2、char*ptr;: 指针所指向的的类型是char 3、int**ptr;: 指针所指向的的类型是int* 4、int(*ptr)[3];: 指针所指向的的类型是int()[3] 5、int*(*ptr)[4];: 指针所指向的的类型是int*()[4]