c++中引用、指针、值的区别与用途详解

2023-05-16

1.指针参数传递

指针参数传递本质上是值传递 ,它所传递的是⼀个地址值。值传递过程中,被调函数的形式参数作为被调函数的局部变量处理,会在栈中开辟内存空间以存放由主调函数传递进来的实参值,从⽽形成了实参的⼀个 副本(替身) 。

#include <iostream>
//指定缺省的命名空间
using namespace std;
int caculate(int *pa);
int calulate(int *pa) {
    *pa = 128;
    pa = nullptr;//未改变实参的地址
    cout << pa << endl;
    return 0;
 
 
}
 
int main() {
    
    int a = 10;
    int result = calulate(&a);
    cout << a << endl;
    cout << &a << endl;
}
2.引用参数传递

引⽤参数传递过程中,被调函数的形式参数也作为局部变量在栈中开辟了内存空间,但是这时存放的是由主调函数 放进来的实参变量的地址 。被调函数对 形参(本体) 的任何操作都被处理成间接寻址,即通过栈中存放的地址访问。
主调函数中的实参变量(根据别名找到主调函数中的本体)。因此,被调函数对形参的任何操作都会影响主调函数 中的实参变量。

#include <iostream>
//指定缺省的命名空间
using namespace std;
int caculate(int &pa);
int calulate(int &pa) {
    pa = 128;//形参为实参的别名
    cout << &pa << endl;
    return 0;
}
 
int main() {
    
    int a = 10;
    int result = calulate(a);
    cout << a << endl;
    cout << &a << endl;
}

/****************************

c++引用与指针的区别

★ 相同点:

    1. 都是地址的概念;

    指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。

    ★ 区别:

    1. 指针是一个实体,而引用仅是个别名;

    2. 引用使用时无需解引用(*),指针需要解引用;

    3. 引用只能在定义时被初始化一次,之后不可变;指针可变;

    引用“从一而终” ^_^

    4. 引用没有 const,指针有 const,const 的指针不可变;

    5. 引用不能为空,指针可以为空;

    6. “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;

    typeid(T) == typeid(T&) 恒为真,sizeof(T) == sizeof(T&) 恒为真,但是当引用作为成员时,其占用空间与指针相同(没找到标准的规定)。

    7. 指针和引用的自增(++)运算意义不一样;

    ★ 联系

    1. 引用在语言内部用指针实现(如何实现?)。

    2. 对一般应用而言,把引用理解为指针,不会犯严重语义错误。引用是操作受限了的指针(仅容许取内容操作)。

    引用是C++中的概念,初学者容易把引用和指针混淆一起。一下程序中,n 是m 的一个引用(reference),m是被引用物(referent)。

    int m;

    int &n = m;

    n 相当于m 的别名(绰号),对n 的任何操作就是对m 的操作。例如有人名叫王小毛,他的绰号是“三毛”。说“三毛”怎么怎么的,其实就是对王小毛说三道四。所以n 既不是m 的拷贝,也不是指向m 的指针,其实n就是m 它自己。

    引用的一些规则如下:

    (1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。

    (2)不能有NULL 引用,引用必须与合法的存储单元关联(指针则可以是NULL)。

    (3)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。

    以下示例程序中,k 被初始化为i 的引用。语句k = j 并不能将k 修改成为j 的引用,只是把k 的值改变成为6.由于k 是i 的引用,所以i 的值也变成了6.

    int i = 5;

    int j = 6;

    int &k = i;

    k = j; // k 和i 的值都变成了6;

    上面的程序看起来象在玩文字游戏,没有体现出引用的价值。引用的主要功能是传递函数的参数和返回值。C++语言中,函数的参数和返回值的传递方式有三种:值传递、指针传递和引用传递。

    以下是“值传递”的示例程序。由于Func1 函数体内的x是外部变量n 的一份拷贝,改变x 的值不会影响n, 所以n 的值仍然是0.

 void Func1(int x)
{
x = x + 10;
}
int n = 0;
Func1(n);
cout << “n = ” << n << endl;// n = 0

    以下是“指针传递”的示例程序。由于Func2 函数体内的x 是指向外部变量n 的指针,改变该指针的内容将导致n 的值改变,所以n 的值成为10.

 void Func2(int *x)
{
(* x) = (* x) + 10;
}

int n = 0;
Func2(&n);
cout << “n = ” << n << endl; // n = 10

    以下是“引用传递”的示例程序。由于Func3 函数体内的x 是外部变量n 的引用,x和n 是同一个东西,改变x 等于改变n,所以n 的值成为10.

 void Func3(int &x)
{
x = x + 10;
}

int n = 0;
Func3(n);
cout << “n = ” << n << endl; // n = 10

对比上述三个示例程序,会发现“引用传递”的性质象“指针传递”,而书写方式象“值传递”。实际上“引用”可以做的任何事情“指针”也都能够做,为什么还要“引用”

    这东西?

    答案是“用适当的工具做恰如其分的工作”。

    指针能够毫无约束地操作内存中的如何东西,尽管指针功能强大,但是非常危险。

    就象一把刀,它可以用来砍树、裁纸、修指甲、理发等等,谁敢这样用?

    如果的确只需要借用一下某个对象的“别名”,那么就用“引用”,而不要用“指针”,以免发生意外。比如说,某人需要一份证明,本来在文件上盖上公章的印子就行了,如果把取公章的钥匙交给他,那么他就获得了不该有的权利。

    ——————————

    条款一:指针与引用的区别

    指针与引用看上去完全不同(指针用操作符‘*’和‘->’,引用使用操作符‘。’),但是它们似乎有相同的功能。指针与引用都是让你间接引用其他对象。你如何决定在什么时候使用指针,在什么时候使用引用呢?

    首先,要认识到在任何情况下都不能用指向空值的引用。一个引用必须总是指向某些对象。因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因为这样你可以赋空值给该变量。相反,如果变量肯定指向一个对象,例如你的设计不允许变量为空,这时你就可以把变量声明为引用。

    “但是,请等一下”,你怀疑地问,“这样的代码会产生什么样的后果?”

    char *pc = 0;// 设置指针为空值

    char& rc = *pc;// 让引用指向空值

    这是非常有害的,毫无疑问。结果将是不确定的(编译器能产生一些输出,导致任何事情都有可能发生),应该躲开写出这样代码的人除非他们同意改正错误。如果你担心这样的代码会出现在你的软件里,那么你最好完全避免使用引用,要不然就去让更优秀的程序员去做。我们以后将忽略一个引用指向空值的可能性。

    因为引用肯定会指向一个对象,在C里,引用应被初始化。

    string& rs;// 错误,引用必须被初始化

    string s("xyzzy");

    string& rs = s;// 正确,rs指向s

    指针没有这样的限制。

    string *ps;// 未初始化的指针

    // 合法但危险

    不存在指向空值的引用这个事实意味着使用引用的代码效率比使用指针的要高。因为在使用引用之前不需要测试它的合法性。

 void printDouble(const double& rd)
{
     cout << rd; // 不需要测试rd,它
} // 肯定指向一个double值
相反,指针则应该总是被测试,防止其为空:
void printDouble(const double *pd)
{
     if (pd)

     { // 检查是否为NULL
           cout << *pd;
     }
}

    指针与引用的另一个重要的不同是指针可以被重新赋值以指向另一个不同的对象。但是引用则总是指向在初始化时被指定的对象,以后不能改变。

 string s1("Nancy");
string s2("Clancy");
string& rs = s1; // rs 引用 s1
string *ps = &s1; // ps 指向 s1
rs = s2; // rs 仍旧引用s1,
// 但是 s1的值现在是
// "Clancy"
ps = &s2; // ps 现在指向 s2;
// s1 没有改变

    总的来说,在以下情况下你应该使用指针,一是你考虑到存在不指向任何对象的可能(在这种情况下,你能够设置指针为空),二是你需要能够在不同的时刻指向不同的对象(在这种情况下,你能改变指针的指向)。如果总是指向一个对象并且一旦指向一个对象后就不会改变指向,那么你应该使用引用。

    还有一种情况,就是当你重载某个操作符时,你应该使用引用。最普通的例子是操作符[].这个操作符典型的用法是返回一个目标对象,其能被赋值。

 vector<int> v(10); // 建立整形向量(vector),大小为10;
// 向量是一个在标准C库中的一个模板(见条款35)
v[5] = 10; // 这个被赋值的目标对象就是操作符[]返回的值
如果操作符[]返回一个指针,那么后一个语句就得这样写:
*v[5] = 10;

    但是这样会使得v看上去象是一个向量指针。因此你会选择让操作符返回一个引用。(这有一个有趣的例外,参见条款30)

    当你知道你必须指向一个对象并且不想改变其指向时,或者在重载操作符并为防止不必要的语义误解时,你不应该使用指针。而在除此之外的其他情况下,则应使用指针假设你有

void func(int* p, int&r);
int a = 1;
int b = 1;
func(&a,b);

    指针本身的值(地址值)是以passby value进行的,你能改变地址值,但这并不会改变指针所指向的变量的值,

    p = someotherpointer;//a is still 1

    但能用指针来改变指针所指向的变量的值,

    *p = 123131; // a now is 123131

    但引用本身是以pass byreference进行的,改变其值即改变引用所对应的变量的值

    r = 1231;// b now is 1231

    尽可能使用引用,不得已时使用指针。

    当你不需要“重新指向”时,引用一般优先于指针被选用。这通常意味着引用用于类的公有接口时更有用。引用出现的典型场合是对象的表面,而指针用于对象内部。

    上述的例外情况是函数的参数或返回值需要一个“临界”的引用时。这时通常最好返回/获取一个指针,并使用 NULL 指针来完成这个特殊的使命。(引用应该总是对象的别名,而不是被解除引用的NULL 指针)。

    注意:由于在调用者的代码处,无法提供清晰的的引用语义,所以传统的 C 程序员有时并不喜欢引用。然而,当有了一些 C++ 经验后,你会很快认识到这是信息隐藏的一种形式,它是有益的而不是有害的。就如同,程序员应该针对要解决的问题写代码,而不是机器本身。

/**************************************************************

C++中指针和引用的区别比较

很多人一定都有这样的疑惑,包括我之前也不是很清楚,经过学习一段时间QT之后,想把自己的总结和心得和大家分享一下。

       先明确一下什么是指针,什么是引用。

指针:

       指针是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。使用*定义指针。

引用:

       引用引入了对象的一个同义词。定义引用的表示方法与定义指针相似,只是用&代替了*。引用是c++对c语言的重要扩充。引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样

指针和引用的区别:

      1.指针是一个实体,而引用仅是个别名;

      2.引用必须被初始化,指针不必;

      3.引用只能在定义时被初始化一次,之后不可变;指针可以改变所指的对象;

      4.可以有const指针,但是没有const引用;

      5.不存在指向空值的引用,但是存在指向空值的指针,即引用不能为空,指针可以为空;

      6.“sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;

      7.指针和引用的自增(++)运算意义不一样; 指针自增指向下一个地址,而引用是对变量本身的值的增加。

      8.程序为指针变量分配内存区域,而引用不需要分配内存区域;

      9.指针可以有多级,但是引用只能是一级,例如int **p是合法的,而 int &&a是不合法的; 

      10.指针和引用作为函数参数进行传递时也不同。用指针传递参数,可以实现对实参进行改变的目的;在将引用作为函数参数进行传递时,实质上传递的是实参本身,而不是实参的一个拷贝,因此对形参的修改其实是对实参的修改。

       总而言之指针与引用的一个重要的不同是指针可以被重新赋值以指向另一个不同的对象。但是引用则总是指向在初始化时被指定的对象,以后不能改变。

指针和引用的相同点:

      两者都是地址的概念,指针指向一块儿内存,其内容为所指内存的地址;引用是某块儿内存的别名。

 区分用指针和引用的不同情况:

使用引用的情况:

        1.常引用,用这种方式声明的引用,不能通过引用对目标变量的值进行修改,从而使引用的目标成为const,达到了引用的安全性,函数体不能对引用型参数修改目标变量。声明方式:const  类型标识符  &引用名 = 目标变量名

        2.作为函数的返回值,当类A的数据成员包含B类的对象,可以在类A中定义一个方法,返回B类的对象的引用,返回的是引用就不会有副本产生,可以直接修改类对应类B的对象。

函数定义时要按以下格式:

    类型标识符  &函数名 (形参列表及类型说明)

    {  函数体  }

引用作为返回值,必须遵守以下规则:

  1.不能返回局部变量的引用,主要原因是局部变量会在函数返回后被销毁,因此被返回的引用就成为了"无所指"的引用,程序会进入未知状态。

  2.不能返回函数内部new分配的内存的引用。虽然不存在局部变量的被动销毁问题,可对于这种情况(返回函数内部new分配内存的引用),又面临其它局面。例如,被函数返回的引用只是作为一个临时变量出现,而没有被赋予一个实际的变量,那么这个引用所指向的空间(由new分配)就无法释放,造成内存泄漏。

使用指针和引用的情况对比:

        1.是考虑到存在不指向任何对象的可能(在这种情况下,能够设置指针为空)

        2.需要能够在不同的时刻指向不同的对象(在这种情况下,能改变指针的指向)。如果总是指向一个对象并且一旦指向一个对象后就不会改变指向,那么就应该使用引用。

        3.重载某个操作符时,应该使用引用。当你知道你必须指向一个对象并且不想改变其指向时,或者在重载操作符并为防止不必要的语义误解时,你不应该使用指针。而在除此之外的其他情况下,则应使用指针。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++中引用、指针、值的区别与用途详解 的相关文章

  • C++中HANDLE句柄的概念

    HANDLE xff1a 句柄 xff0c 是WINDOWS用来表示对象的 xff0c 是一个通用句柄表示 在WINDOWS程序中 xff0c 有各种各样的资源 xff08 窗口 图标 光标等 xff09 xff0c 系统在创建这些资源时为
  • qt中的进程优先级及应用内存大小设置方法,VS和Qt工程中申请超过2G的内存的方法

    l 进程优先级 l 获取当前进程句柄 l 优先级设置 l 优先级变动 l 优先级获取 一 进程优先级 xff08 优先级等级 简单的说就是进程 线程 的优先级越高 xff0c 那么就可以分占相对多的CPU时间片 每个进程都有相应的优先级 x
  • 应用程序进程,内存,虚拟内存之间的关系详解(1)

    一般一个32位进程有2G的内存可以用 xff0c 如果是只用到100多M就出现异常崩溃的话 xff0c 首先要看下是报错的原因 xff0c 是out of memory xff0c 还是access error 如果是后面一种情况的话 xf
  • 计算机操作系统执行可执行程序时,内存分配详解

    处理器遇到的地址都是虚拟地址 xff0c 虚拟地址和物理地址都分成页码 xff08 页框 xff09 和偏移量俩部分组成 在虚拟地址转换成物理地址的过程中 xff0c 偏移值不变 xff0c 而页码和页框码之间的映射就在一个映射记录表 页表
  • 应用程序进程,内存,虚拟内存之间的关系详解(2)

    浅谈操作系统与内存 对于计算机的发明 xff0c 相信大家都有耳闻那个占地面积按平米算的第一台计算机 在那个时候 xff0c CPU的资源是极其珍贵的 xff0c 随着这些年突飞猛进的发展 xff0c 一片指甲盖大小的民用级CPU一秒钟能执
  • 虚拟内存概念解疑

    虚拟内存别称 虚拟存储器 xff08 Virtual Memory xff09 电脑 中所运行的 转存失败重新上传取消 程序均需经由 内存执行 xff0c 若执行的程序占用内存很大或很多 xff0c 则会导致内存消耗殆尽 为解决该问题 xf
  • 计算机系统中虚拟内存概念解疑(1)

    处理器遇到的地址都是虚拟地址 xff0c 虚拟地址和物理地址都分成页码 xff08 页框 xff09 和偏移量俩部分组成 在虚拟地址转换成物理地址的过程中 xff0c 偏移值不变 xff0c 而页码和页框码之间的映射就在一个映射记录表 页表
  • 计算机系统中虚拟内存概念解疑(2)

    虚拟内存机制 1 计算机的存储系统 2 为什么要有虚拟内存 在早期的计算机中 xff0c 是没有虚拟内存的概念的 我们要运行一个程序 xff0c 会把程序全部装入内存 xff0c 然后运行 当运行多个程序时 xff0c 经常会出现以下问题
  • windows系统内存结构概述(重要概念释疑)

    13 1 Windows的虚拟地址空间安排 13 1 1虚拟地址空间的分区 xff08 即虚拟地址空间布局 xff09 进程的地址空间划分 分区 x86 32位 Windows 3GB用户模式下的x86 32位Windows X64 64位
  • 地址总线,字长,内存容量,寻址范围 之间的计算

    注意 xff1a 由于虚拟内存技术 xff0c 在经典32位桌面操作系统中 xff0c 有32条地址线 特殊情况下可能36条 xff0c 那么CPU可直接寻址到的内存空间为2 32字节 xff0c 也就是4GB 虽说内存寻址可以到4G xf
  • Android 10 开机启动sh脚本

    客户需求要在sdcard目录下增加文件和文件夹 开机后增加运行sh脚本 xff0c 脚本中执行mkdir和cp操作 1 拷贝客户文件和脚本 PRODUCT COPY FILES 43 61 device mediatek vendor co
  • 问题笔记0

    1 数据库连接及命令没有关闭释放导致操作被占用 2 内存没有释放导致内存不断增加导致软件崩溃 3 c socket的bind地址函数第一个参数不对默认可能不是IP4导致bind地址失败
  • C++程序开启大地址(虚拟内存),让32位程序使用4G内存的方法,虚拟内存概念及寻址范围详解

    如何让 32 位程序突破 2G 内存限制 一般情况下 xff0c 32 位程序的内存大小被限制在了 2G xff0c 不过可以通过以下的操作来突破这个限制 修改操作系统参数 这一步骤只针对 32 位操作系统 xff0c 64 位操作系统可以
  • 虚拟内存概念3

    1 物理内存 1 1 物理内存概述 1 2 直接使用物理内存的问题 1 2 1 多进程地址布局困难 1 2 2 进程地址空间小 1 2 3 程序链接不统一 2 虚拟内存 2 1 引入虚拟内存的目的 2 2 局部性原理与虚拟内存 2 3 虚拟
  • 计算机程序虚拟内存寻址最大范围(决定因素)与程序最大内存之间的关系详解

    在早期的计算机中 xff0c 程序都是直接运行在物理内存上的 xff0c 意思是运行时访问的地址都是物理地址 xff0c 而这要求程序使用的内存空间不超过物理内存的大小 在现代计算机操作系统中 xff0c 为了提高CPU的利用率计算机同时运
  • QT中线程安全退出实例

    1 QThread安全退出 线程创建以及退出示例 创建 TestObject object 61 new TestObject QThread thread 61 new QThread object gt moveToThread thr
  • qt中连接sqlite数据库提示QSQLITE driver not loaded解决办法(重要)

    如下 xff0c 经测试无效 xff0c 最后发现是plugins文件夹找错位置了 Qt加载数据库时 xff0c 数据库驱动必须放在sqldrivers文件夹下 xff0c 1 将Qt安装程序的plugins sqldrivers路径复制到
  • c#操作SQLite, 判断表、字段是否存在,新增、删除、重命名列实例

    SQLiteHelper class 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
  • c#求STDEV标准偏差方法

    public static float StDev float arrData 计算标准偏差 float xSum 61 0F float xAvg 61 0F float sSum 61 0F float tmpStDev 61 0F i
  • QT中QMap使用实例详解

    QMap QMultiMap属于关联式容器 xff0c 其底层结构是通过二叉树实现 xff0c 故其查找value的效率很快 QMap中的数据都是成对出现的 xff0c 第一个称为key xff08 键 xff09 xff0c 第二个称va

随机推荐

  • C++中函数调用的整个过程内存堆栈分配详解

    一个函数执行过程中堆栈分配情况实例详解 下面的例子可以完全展示不同的变量所占的内存区域 xff1a main cpp int a 61 0 全局初始化区 char p1 全局未初始化区 main int b 栈中 char s 61 34
  • vncserver创建与客户端连接

    1 xff0e 确认服务器端是否安装了 vncserver Vnc 相关依赖包 xff1a gtk vnc python 0 3 2 3 el5 vnc server 4 1 2 14 el5 gtk vnc 0 3 2 3 el5 vnc
  • C++程序内存分配方式概念与区别(堆与栈)

    一 内存布局 1 栈区 xff08 stack xff09 xff1a 由编译器自动分配释放 xff0c 存放函数的参数值 xff0c 局部变量值等 xff0c 其操作方法类似数据结构中的栈 2 堆区 xff08 heap xff09 xf
  • QT中QString 转换为 char *的几种方法

    Qt下 QString转char 的问题 char MenuButton getTextStr QString string QString str 61 string char text 61 NULL QByteArray ba 61
  • C++中构造函数什么时候会被调用(从本质上理解)

    在 C 43 43 程序中 xff0c 变量在定义时可以初始化 如果不进行初始化 xff0c 变量的初始值会是什么呢 xff1f 对全局变量和局部变量来说 xff0c 这个答案是不一样的 未初始化的全部变量 全局变量在程序装入内存时就已经分
  • c++中内存堆栈的创建与回收

    c 43 43 new 堆 栈 根据32位的Windows系统默认有2GB的用户空间 xff0c 则不能new超过2GB的 xff0c 执行下列代码 xff1a double p 61 new double 128 1024 1024 2
  • c++中指针概念及指针变量的大小

    1 指针的概念 想要清楚的理解指针概念我们必须先弄清楚数据在内存中是怎样储存的 xff0c 又怎样读取的 在电脑的内存区里每一个字节都有一个编号 xff0c 这个编号就是地址 我们在程序中定义一个变量 xff0c 对程序进行编译时 xff0
  • c++中指针,堆栈内存分配重要概念理解汇总(实例注释)

    一个函数执行过程中堆栈分配情况实例详解 对于不同的平台程序 xff0c win32程序所有内存寻址 xff08 局部变量 xff0c 指针等 xff09 都是32位即4个字节 xff0c x64为64位8个字节 下面的例子可以完全展示不同的
  • Qt中使用QThread实现多线程2

    注意 xff1a 当一个QObject类型B gt MoveToThread xff08 线程A xff09 xff0c 必须执行线程A的Start方法才能启动线程 xff08 一个线程包含线程循环等 xff09 xff0c 这时如果想要将
  • Qt中一个信号连接多个槽函数后的执行顺序

    当我们想一个信号触发多个槽函数的时候 xff0c 又对执行顺序有要求 xff0c 要么要知道这些槽函数的执行顺序 xff0c Qt5后 xff0c 在信号发射后 xff0c 槽函数会按照链接顺序执行 xff0c 下面写个简单的例子来验证一下
  • QT中线程的依附性详解

    1 子线程中创建的对象不应再其他线程中被调用 xff0c 包括使用槽函数的形式 在创建了MyThread 对象后 xff0c obj otherObj yetAnotherObj 的线程依附性是怎么样的 xff1f 要回答这个问题 xff0
  • qt中使用connect指令来写socket但与QObject的connect冲突编译器报错问题解决

    经相关查阅 在connect前加个域分隔符就好了 connect 这样QT就不会误解了
  • webpack--加载器(loader)

    加载器loader webpack 只能理解 JavaScript 和 JSON 文件 xff0c 这是 webpack 开箱可用的自带能力 loader 让 webpack 能够去处理其他类型的文件 xff0c 并将它们转换为有效 模块
  • QT中多线程QThread使用解疑实例

    下面是测试类 xff1a define TESTDEMO H include 34 qdebug h 34 include 34 qthread h 34 include lt QObject gt class TestDemo publi
  • Qt中创建、写入、删除(INI、XML文件)

    include 34 widget h 34 include lt QApplication gt include lt QSettings gt include lt QDebug gt 写ini配置文件 void setIni QSet
  • Qt中的枚举类型的使用方法

    Qt中的枚举变量 Q ENUM Q FLAG Q NAMESPACE Q ENUM NS Q FLAG NS以及其他 前言 Q ENUM的使用 Q FLAG的引入解决什么问题 xff1f Q NAMESPACE Q ENUM NS和Q FL
  • QList类迭代器详解

    QList Detailed Description QList 是Qt的通用容器类之一 它将项目存储在一个列表中 xff0c 该列表提供了基于索引的快速访问以及基于索引的插入和删除 QList xff0c QLinkedList 和QVe
  • C++中返回引用和返回值的区别详解(1)

    一 主要讨论下面两个函数的区别 xff1a int amp at return m data int at return m data 上面两个函数 xff0c 第一个返回值是int的引用int amp xff0c 第二个返回值是int x
  • C++中值传递、指针传递和引用传递的比较详解

    C 43 43 引用与指针的比较 引用是C 43 43 中的概念 xff0c 初学者容易把引用和指针混淆一起 一下程序中 xff0c n是m的一个引用 xff08 reference xff09 xff0c m是被引用物 xff08 ref
  • c++中引用、指针、值的区别与用途详解

    1 指针参数传递 指针参数传递本质上是值传递 xff0c 它所传递的是 个地址值 值传递过程中 xff0c 被调函数的形式参数作为被调函数的局部变量处理 xff0c 会在栈中开辟内存空间以存放由主调函数传递进来的实参值 xff0c 从 形成