C++ 指针 技术教程文章

C++函数传参中形参是值、指针、引用时的不同【代码】【图】

C++函数传参中形参是值、指针、引用时的不同 代码示例1:值传递 #include<iostream> #include<string.h> using std::cout; using std::endl; using std::cin; void swap1(int x,int y)//值传递 {int t;t=x;x=y;y=t;} int main() {int a=5,b{10}; cout<<"Before1: a="<<a<<" b="<<b<<endl;swap1(a,b);cout<<"After1: a="<<a<<" b="<<b<<endl; }运行结果截图1: 代码示例2:指针作为形参 #include<iostream> #include<string.h> ...

C++ 全面刨析使用指针方法 _new _delete【代码】【图】

指针 1 #include<iostream>2 using namespace std;3 int main() {4 int avr = 8;5 int* pn;//声明 int* pn = &avr;//初始化6 pn = &avr;7 cout << *pn << endl;8 cout << pn << endl;9 system("pause"); 10 return 0; 11 }指针的危险:int* pn; *pn=2; 指针指向的是地址,初始化一定要有初始化确定的地址,否则,指针可能指向任何位置;new对 指针 的 工作 方式 有...

【C++札记】C/C++指针使用常见的坑【图】

C/C++中的指针让程序员有了更多的灵活性,但它同时也是一把双刃剑,如果用的不好,则会让你的程序出现各种各样的问题,有人说,C/C++程序员有一半的工作量是花在处理由指针引起的bug上,可想而知,指针中包含的陷阱是多么可怕。既然如此,我们在编写代码的时候就应该把好关。 要想在编写代码的时候尽可能避免指针带来的问题,就需要知道不恰当的使用指针到底会引发哪些问题, 又该如何去避免它?下面一起来总结在使用指针时容易遇...

我说C/C++——函数参数传递方式(三种:值传递、引用传递、指针传递)【图】

目录 一、前言 二、初识三种函数参数传递方式 三、代码演示 3.1 值传递(传值) 3.2 引用传递(传引用) 3.3 指针传递、地址传递(传地址(传址)) 四、引用传递和指针传递的区别 五、小结 一、前言 本文介绍C/C++语言中三种函数参数传递方式:值传递、引用传递、指针传递,全文分为三个部分:“初识三种函数参数传递方式”“代码演示”“引用传递和指针传递的区别”。 初识三种函数参数传递方式:该部分用表格对比三种函数参数传...

C/C++ 智能指针线程池【代码】

ThreadPool.h {#ifndef __THREADPOOL_H__ #define __THREADPOOL_H__ #include <memory> #include <mutex> #include <iostream> #include <thread> #include <vector>typedef unsigned int THREADHANDLE; static THREADHANDLE ThreadHanle = -1; #define THREADBEGIN(var) if(var == ThreadHanle){return;}/* #include "ThreadPool.h" mutex m;void func(int threadID) {while (true){THREADBEGIN(threadID);std::lock_guard<mutex>...

C++:->是指针的指向运算符

->是指针的指向运算符

《深入理解C++11》笔记-智能指针unique_ptr、shared_ptr、weak_ptr

本篇介绍C++11中新增的智能指针:unique_ptr、shared_ptr、weak_ptr。使用智能指针可以免于我们去主动管理内存,智能指针会自动释放内存: 来源:https://blog.csdn.net/WizardtoH/article/details/81016953

c++ 用指针操作数组

#include <iostream> using namespace std; const int Max = 5;double * fill_array(double * first, int size); void show_array(double * first, const double * last); void revalue(double r, double * first, const double * last);int main() {double properties[Max];double * size = fill_array(properties, Max);show_array(properties, size);if (size > 0) {cout << "Enter revaluation factor: ";double factor;while ...

c++ 中的智能指针【代码】【图】

目录1. 初识智能指针1.1 内存泄漏的原因分析1.2 内存泄漏的解决方案2. 智能指针类模板2.1 智能指针的意义2.2 STL 中的智能指针应用2.3 QT 中的智能指针应用2.4 智能指针模板类的实现 初识智能指针在c++语言中没有垃圾回收机制,内存泄漏这个问题就不得不让程序员自己来解决,稍有不慎就会给软件带来Bug,幸运的是我们可以使用智能指针去解决内存泄漏的问题。 1、 内存泄漏的原因分析(1)动态申请堆空间,用完后不归还;(2)...

C++中传值传指针传引用的区别【图】

当调用函数时,传递的参数有传值、传指针、传引用这三种形式。 直接传值是直接开辟了一个跟主函数实参一样的空间(地址不一样),里面存放了了跟实参一样大小的值,就相当于数值大小相同但是位置不同。你在这个调用函数里使用这个一样大小的值,完全不影响主函数实参的值。就好比主函数的空间就是一栋楼,里面的一个房间里放着一些东西(相当于实参变量值)。现在我调用了一个函数,就相当于我在另一栋楼的另一个房间里面,把刚才第...

C++基础总结(三):C++进阶——基本输入输出、指针、引用【图】

今天小编分享 C++基本输入输出、指针、引用 ,建议大家收藏慢慢学习,同时希望对大家的C++学习有所帮助。?C++ 基本的输入输出 今天我们来熟悉一下C++ 编程中最基本和最常见的 I/O 操作。 C++ 的 I/O 发生在流中,流是字节序列。如果字节流是从设备(如键盘、磁盘驱动器、网络连接等)流向内存,这叫做输入操作。如果字节流是从内存流向设备(如显示屏、打印机、磁盘驱动器、网络连接等),这叫做输出操作。 I/O 库头文件 下列的头文...

c++之指针与数组入门【代码】【图】

c++ —指针与数组入门 指针数组 数组的元素是指针类型 例:Point *pa[2]; 由pa[1]、pa[2]两个指向Point类的指针构成。 #include <iostream> using namespace std;int main() {int line1[3]={1,2,3};int line2[3]={4,5,6};int line3[3]={7,8,9};int *pLine[3]={line1,line2,line3}; //指针数组 for(int i=0;i<3;i++){for(int j=0;j<3;j++)cout<<pLine[i][j]<<" "; //此时的指针数组就可以当二维数组用 cout<<endl;} }注:二...

C++定义函数指针

一: 如何定义函数指针 该函数类型为int(int,int),要想声明一个指向该类函数的指针,只需用指针替换函数名即可: int (*pf)(int,int);//未初始化 这个函数指针可调用所有的有两个int形参的,并且返回类型为int的函数,将函数名赋给指针变量就行 二:用typedef定义函数指针

C++复制构造函数,引用,指针,new【代码】

复制构造函数形如className :: className(const &) / className :: className(const className &)后者能以常量对象作为参数如不写复制构造函数,则编译器默认提供,为了完成对象的复制功能 它起作用有三个工作环境: 1.一个对象初始化另一个同类的对象1 Simple c2(c1); 2 Simple c2 = c1;//初始化2.如果某函数有一个参数是类的一个对象,那么该函数被调用时,类的复制构造函数被调用 1 Simple A2 {3 pbulic:4 A(){};5 ...

C++ 指针【代码】

指针1.概念记录地址数据的变量2.声明int *p_val; int 表示指针记录整数类型存储区的地址(这个指针指向了一个整数类型的存储区) *表示这个变量是一个指针 如果一条语句里声明了多个指针变量就需要在每个指针变量名称前加* 可以用typedef关键字给指针类型起别名,别名可以用来声明指针变量#include <stdio.h> //给指针类型起来一个类型名称 //p表示这是一个指针,int表示这是一个指向整数类型存储区的指针,_t表示这是一个类型名称...

C++11 packaged_task,函数指针类型【代码】

std::string getData(std::string token) {std::string data = "Data :" + token;return data; } int main() {// 创建封装回调的packaged_task<函数指针>std::packaged_task<std::string(std::string)> task(getDataFromDB);////从package_task<>获取相关的future<>std::future<std::string> result = task.get_future();//将packaged_task传递给线程以异步运行std::thread th(std::move(task), "Arg");// join,阻塞到线程完成时返...

[modern c++] 智能指针unique_ptr【代码】

https://en.cppreference.com/w/cpp/memory/unique_ptr #include <iostream> #include <memory>struct Foo {int id;Foo(int id) : id(id) { std::cout << "Foo " << id << '\n'; }~Foo() { std::cout << "~Foo " << id << '\n'; } };int main() {std::unique_ptr<Foo> p1( std::make_unique<Foo>(1) );{std::cout << "Creating new Foo...\n";std::unique_ptr<Foo> p2( std::make_unique<Foo>(2) );// p1 = p2; // 错误! 右边只能...

c++ 常量指针 和 指针常量【代码】

常量指针是指针指向的内容是常量,可以有一下两种定义方式: const int * n; int const * n;常量指针说的是不能通过这个指针改变变量的值,但是还是可以通过其他的引用来改变变量的值。 int a=5; const int* n=&a; a=6;常量指针指向的值不能改变,但是这并不是意味着指针本身不能改变,常量指针可以指向其他的地址。 int a=5; int b=6; const int* n=&a; n=&b;作为对比,指针常量是指,这个指针本身是个常量,不能再指向其他的地址...

C++指针也只能传值?指针传值与传址的实例解析【代码】【图】

??指针也存在“传值”和“传址”的操作。下面用一小段测试代码及结果来进行说明: bool GetValue(int* var) {int b = 10;var = &b;return true; }int main() {int* a = nullptr;GetValue(a);return 0; }??以上是测试代码,下面是运行结果: ??在还没运行GetValue(a);函数的时候,可以看出,a是nullptr类型。 ??运行进去之后,可以看到GetValue()函数的形参var有地址,且值为10。 ??但是,运行出来之后,可以看到,a的值与运行Ge...

c++智能指针介绍之auto_ptr【代码】

c++智能指针介绍之auto_ptrc++98: auto_ptr, 包含头文件为<memory>里, c++11 弃用,unique_ptr代之auto_ptr 作用及特性:智能指针的引用,主要是为了解决异常发生时产生内存泄漏。 auto_ptr在创建的时候获取对象的所有权,在析构的时候,释放对象内存空间(RAII1)。 重载了函数的 *和->运算符,使得其操作看起来像个内置指针。 没有使用引用计数,在复制构造或赋值的时候发生所有权转移包含的操作:拷贝构造、赋值操作:auto_p...