【[c++] 双重指针】教程文章相关的互联网学习教程文章

C/C++函数指针总结【代码】

一 、函数指针介绍 函数指针指向某种特定类型,函数的类型由其参数及返回类型共同决定,与函数名无关。举例如下: int add(int nLeft,int nRight);//函数定义 该函数类型为int(int,int),要想声明一个指向该类函数的指针,只需用指针替换函数名即可: int (*pf)(int,int);//未初始化 则pf可指向int(int,int)类型的函数。pf前面有*,说明pf是指针,右侧是形参列表,表示pf指向的是函数,左侧为int,说明pf指向的函数返回值为int。则...

[C / C++] 关于指针置空和野指针问题的思考.【代码】

前言 最近在复习数据结构,在复习到树和二叉树时,被指针置空和野指针问题给搞晕了。 看这一段前序创建二叉树的代码 void PreCreate(BiNode * b){ElementType e;printf("请输入结点的id(如果输入-1,那么就不在这个枝干上创建结点):\n");scanf("%d",&e.id);if(e.id == -1){ //如果用户输入了-1,那么将该结点的状态设为-999999,等函数返回之后释放该节点/*为什么这里不直接释放结点并置空呢比如这里写free(b);b = NULL;这样做...

C++智能指针的使用

动态内存: c++中,动态内存的管理是通过一对操作符来完成的: new- 用来为对象分配空间,并返回一个指向该对象的指针delete- 接受一个动态对象的指针,销毁该对象,并释放与之关联的内存(指针本身的地址并没有改变) 动态内存管理容易出问题,需要程序员手动释放内存。为了更容易使用动态内存,c++11新标准提出了两种智能指针:shared_ptr 和 unique_ptr。 智能指针的操作类似于普通指针,最主要的区别是它还负责自动释放所其指向...

C/C++指针(一)【代码】

指针【一】(C/C++) 1. 什么是指针 指针为C/C++中的一种变量,与常见的 int , double 等相似,只不过指针变量存储的是一段地址。因此,可以在将指针看做门牌号。C/C++中,可用以下方法定义指针 type *var_name;其中, type 是指针的基类型,它必须是一个有效的 C/C++ 数据类型, var-name 是指针变量的名称。用来声明指针的星号 * 与乘法中使用的星号是相同的。 但是,在这个语句中,星号是用来指定一个变量是指针。 如下就是指针...

java的引用:用C++/C的引用和指针去理解【代码】

引用和C++的引用的概念基本一样,但是也有一些易错点: static class ElementPara{String name = new String();String func = new String(); } List<ElementPara> element_list = new ArrayList<>(); element_list.add(element_tmp); element_tmp.name = new String(); // 会直接改变element_list里的值。 element_tmp = new ElementPara(); // 不会改改变element_list里的值。 从中,可以看出,如果用C++/C的引用和指针去理解,就...

C#调用C++接口 -- delegate实现函数指针【代码】

C++接口定义 //回调函数定义 typedef void (CALLBACK *PDEVICE_FIND_CALLBACK_V40)(const SADP_DEVICE_INFO_V40 *lpDeviceInfo, void *pUserData);//接口定义 CSADP_API BOOL CALLBACK SADP_Start_V40(PDEVICE_FIND_CALLBACK_V40 pDeviceFindCallBack, int bInstallNPF = 0, void* pUserData = NULL); C++接口转换为C#接口定义 //定义一个委托类型(对应C++中的回调函数) public delegate void PDEVICE_FIND_CALLBACK(IntPtr lp...

C++基础(十一)智能指针之unique_ptr【代码】【图】

前一篇文章介绍了共享指针shared_ptr,这篇介绍另一种智能指针:unique_ptr。 1、创建 与shared_ptr不同,C++11并没有提供类似std::make_shared的标准库函数来返回一个unique_ptr,但是C++14提供了类似的库函数:std::make_unique,语法如下: std::make_unique<类型>(参数列表) 依然以Person类为例: class Person { public:Person(const std::string& strName, int iAge) :m_strName(strName), m_iAge(iAge){}~Person(){ std::co...

c++之this指针探究【代码】【图】

this指针 ??每一个对象都隐式地“包含”一个指针指向对象自身,称之为this指针。当对象调用成员函数时,会默认将对象自身传递给该函数,在函数体内不直接使用对象名,而是使用this指针,即this指针指向该对象,指向调用者。 例1: 附例1代码 //小问学编程 #include<iostream> using namespace std; class Circle { public:Circle();void printRadiusOnly(); private:float radius;float x_center;float y_center; };Circle::Circl...

结构体指针中const的使用——C++【代码】

const使用后,结构体的内容不能被修改,防止误操作。 #include<iostream> #include<string>using namespace std;//定义学生结构体 struct Student {string name;int age;int score; };//将函数中的形参改为指针,可以节省内存空间。 //而且不会复制一个新的副本出来。 void PrintStuInfo1(const struct Student *p) {//p->age = 100; //加const后这句话就是错误的,p变成不可写的(不可修改了)//加const防止误操作std::cout << "n...

指针常量与常量指针【C++】【代码】【图】

常量指针:const int* (int const*) 一个指针,指向的内容是一个常量,内容不能修改,但指针本身可修改。修改内容时,编译器报错" error: assignment of read-only location ... " 指针常量: int * const 一个常量,常量本身是一个指针,指针本身不能修改,但指针内容可修改。修改指针时,编译器报错" error: assignment of read-only location ... " 如果需要一个指针和指向内容皆为常量,不能更改,可以定义为: const in...

C++何时使用引用、指针?【代码】

1、参数传递的方式:传值和传址(1) 传值方式是将实参的值的拷贝传递给函数(方法),在方法内对形参进行操作,其对象是实参的拷贝,对实参不能造成影响.在方法结束返回后,形参被释放丢弃,实参的内容并不会改变;(2) 传址方式,将实参的地址传递给函数(方法),在方法内对形参进行操作即等于对实参进行相同的操作,在方法结束返回后,形参同样被释放,实参的内容将会是对形参进行操作的结果.传址方式,又可以细分为:引用传递(pass-by-reference...

C++基础--指针--使用指针优化局部变量的复制【代码】

使用指针对访存进行优化 ? 假设现在有一个结构体,里面有非常多的成员,现在要对其使用tostring()方法进行打印 struct a {int aaa;//很多成员 }; int main() {struct a xxx = a{ 123 };tostring(xxx);return 0;}void tostring(struct a instance) {cout << instance.aaa << endl; }在tostring方法体里,要进行局部变量与入参的复制,假设该结构体内有大的数据,则非常占用内存,且复制相当消耗时间。这里可以用指针的方式进行处理...

C++基础--指针 野指针和free【代码】

野指针的重复释放问题 最近发现了这样一个问题,一个指针释放两次之后,若在中间不置空,会报Invalid address specified to RtlValidateHeap 无效的堆地址 错误。 #include <iostream> #include <string> #include <malloc.h>using namespace std; int main() {int* p = (int*)malloc(100);free(p);free(p); }想搞清楚为什么发生这种错误,首先得先搞清楚free()做了什么: #include <iostream>using namespace std;int main() {int...

C++学习笔记之 this指针【代码】

this指针 目录this指针this指针的指向this指针与链式编程思想空指针访问成员函数常函数和常对象 this指针的指向this指针指向被调用的成员函数所属的对象#include <iostream> #include <cstdlib>using namespace std;class Person { public:int a;void func(int var){this->a = var; // 相当于a = varcout << this << ": " << this->a << endl;} };int main() {Person p1;Person p2;p1.func(1);p2.func(2);return 0; }0x61fe8c: 1 0...

C++指针与函数【代码】【图】

函数中的数值传递分为值传递和地址传递。 值传递是单纯的复制,修改的只是形参。 void swap(int a, int b) {int temp = a;a = b;b = temp;cout << "swap a = " << a << endl;cout << "swap b = " << b << endl; }地址传递是由形参复制实参的地址,通过解引用的方式访问这个地址,修改后得到的是实参地址上的数据,也就是通过地址传递是可以修改实参的。 void swap_ptr(int *p1, int *p2) {int temp = *p1;*p1 = *p2;*p2 = temp;cou...