content_views"
c lass="markdown_views prism-atom-one-dark">
cap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-bloc k" style="-webkit-tap-highlight-c olor: rgba(0, 0, 0, 0);"> 嵌入式Qt开发C++基础编程
1、初识C++
ckquote> c ++标准输出 c out c ;endl 换行。
ckquote>
<c ode c lass="prism language-c ++">#inc lude "iostream"
using namespac e std;/** 主函数:程序的入口点* 参数:无* 返回值:int类型c ;表示程序的退出状态*/
int main()
{// 输出"c ++"到标准输出流c out<<"c ++"<<endl;// 程序正常退出c ;返回0return 0;
}c ode>
2、数据类型、运算符和表达式
ckquote> C++ 是一种强类型的编程语言c ;它支持多种数据类型、运算符和表达式。下面是对这些主题的简要概述:
数据类型 C++ 中的数据类型可以分为几大类:
基本数据类型 : 整数类型:<c ode>intc ode>, <c ode>shortc ode>, <c ode>longc ode>, <c ode>long longc ode>(以及它们的无符号版本c ;如 <c ode>unsigned intc ode>) 浮点数类型:<c ode>floatc ode>, <c ode>doublec ode>, <c ode>long doublec ode> 字符类型:<c ode>c harc ode>(可以是有符号的或无符号的c ;具体取决于编译器) 宽字符类型:<c ode>wc har_tc ode>(用于存储宽字符c ;如 Unic ode 字符) 布尔类型:<c ode>boolc ode>(只能取 <c ode>truec ode> 或 <c ode>falsec ode>) 复合数据类型 : 数组:存储相同类型元素的固定大小序列。 结构体(<c ode>struc tc ode>):允许你将多个不同类型的变量组合成一个单一的类型。 联合体(<c ode>unionc ode>):一种特殊的数据结构c ;允许你在相同的内存位置存储不同的数据类型。 类(<c ode>c lassc ode>):面向对象编程的基础c ;用于创建自定义的数据类型。 枚举(<c ode>enumc ode>):一种用户定义的数据类型c ;它包含一组命名的整数值。 指针类型 :指针是一个变量c ;其值为另一个变量的地址。所有指针类型的通用形式是 <c ode>type*c ode>c ;其中 <c ode>typec ode> 是指针所指向的变量的数据类型。引用类型 :引用是变量的别名c ;它允许你使用不同的名称来访问同一个变量。引用必须在声明时初始化c ;并且之后不能重新绑定到另一个变量。空类型 :<c ode>voidc ode> 表示无类型。它经常用于不返回任何值的函数或指向任意类型的指针。 运算符 C++ 中的运算符用于执行各种操作c ;如算术运算、比较、逻辑运算、位运算等。以下是一些主要的运算符类别:
算术运算符 :<c ode>+c ode>, <c ode>-c ode>, <c ode>*c ode>, <c ode>/c ode>, <c ode>%c ode>(取模)关系运算符 :<c ode>==c ode>, <c ode>!=c ode>, <c ode>>c ode>, <c ode><c ode>, <c ode>>=c ode>, <c ode><=c ode>逻辑运算符 :<c ode>&&c ode>(逻辑与)、<c ode>||c ode>(逻辑或)、<c ode>!c ode>(逻辑非)位运算符 :<c ode>&c ode>(按位与)、<c ode>|c ode>(按位或)、<c ode>^c ode>(按位异或)、<c ode>~c ode>(按位取反)、<c ode><<c ode>(左移)、<c ode>>>c ode>(右移)赋值运算符 :<c ode>=c ode>(简单赋值)、<c ode>+=c ode>、<c ode>-=c ode>、<c ode>*=c ode>、<c ode>/=c ode> 等(复合赋值)条件运算符 (三元运算符):<c ode>? :c ode>指针和引用运算符 :<c ode>&c ode>(取地址)、<c ode>*c ode>(解引用)范围解析运算符 (作用域解析运算符):<c ode>::c ode>成员访问运算符 :<c ode>.c ode>(成员访问)、<c ode>->c ode>(通过指针访问成员)递增和递减运算符 :<c ode>++c ode>(递增)、<c ode>--c ode>(递减)类型转换运算符 :<c ode>static _c astc ode>, <c ode>dynamic _c astc ode>, <c ode>c onst_c astc ode>, <c ode>reinterpret_c astc ode>(这些是 C++ 特有的类型转换运算符) 表达式 表达式是由运算符和操作数组成的语句c ;用于计算一个值。例如c ;<c ode>x + yc ode> 是一个表达式c ;其中 <c ode>+c ode> 是运算符c ;<c ode>xc ode> 和 <c ode>yc ode> 是操作数。表达式的结果取决于其组成部分的类型和值c ;以及所使用的运算符。
在 C++ 中c ;表达式的计算遵循特定的优先级和结合性规则。例如c ;乘法和除法的优先级高于加法和减法c ;而括号可以用来改变默认的优先级。此外c ;赋值运算符的结合性是从右到左的c ;这意味着在链式赋值表达式中(如 <c ode>a = b = c c ode>)c ;右侧的赋值会首先执行。
ckquote>
ckquote> c in 标准输入
ckquote>
<c ode c lass="prism language-c ++">#inc lude "iostream"using namespac e std;int main()
{string name;int age;float high;c out << "请输入您的姓名:";c in >> name;c out << "请输入您的身高:";c in >> high;c out << "请输入您的年龄:";c in >> age;c out << "---------" << endl;c out << "信息输入完成c ;您的信息如下:" << endl;c out << "姓名:" << name << endl;c out << "身高:" << high <<endl;c out << "年龄:" << age << endl;
}
c ode>
ckquote> 字面常量
ckquote>
<c ode c lass="prism language-c ++">#inc lude "iostream"using namespac e std;int main()
{//整型//21;//实型(小数)// 173.3;//字符型//'a';//字符串型//"hello!";c out << 21 << endl;c out << 173.3 << endl;c out << 'a' << endl;c out << "hello!" << endl;return 0;
}
c ode>
ckquote> 变量的基本类型
ckquote>
<c ode c lass="prism language-c ++">#inc lude "iostream"
#inc lude "windows.h"using namespac e std;int main()
{SetConsoleOutputCP(CP_UTF8);int age = 21 , lav = 56; //整型float hi = 180.5; //实型c har fu_1 = ','; //字符型c har fu_2 = '.'; //字符串型string name = "李华";c out << "我是" << name << fu_1 << "今年" << age << "岁" << fu_2 <<endl;c out << "身高" << hi << "c m" << "体重" << lav << "KG" << endl;return 0;
}
c ode>
ckquote> 比较运算符和字符串的比较运算
ckquote>
<c ode c lass="prism language-c ++">#inc lude "iostream"
#inc lude "c string"using namespac e std;int main()
{int num1 = 3, num2 = 5;bool r1 = num1 == num2; //假为0 ; 真为1c out << r1 << endl;//C语言型字符串c har *str = “hello” c har arr[] = “hello”c har *str = "hello";c har arr[] = "hello";// 两者都为C语言型字符串时c ;不能用比较运算符 只有一个为C++类型才可以// 0表示相等 -1 str < arr 1:str > arr;c out << strc mp(str,arr) << endl;//C++类型字符串string str1 = "hello";c out << (str == str1) << endl;return 0;
}
c ode>
ckquote> 三元运算符
ckquote>
<c ode c lass="prism language-c ++">
// 主函数:根据两次输入的成绩判断是否购买糖果。
//
// 无参数输入。
// 无返回值。
//#inc lude "iostream"using namespac e std;int main()
{// 定义变量以存储两次成绩int grade , grade1;// 输入第一次成绩c out << "输入第一次成绩:";c in >> grade;// 输入第二次成绩c out << "请输入第二次成绩:";c in >> grade1;// 根据两次成绩的比较结果c ;决定是否购买糖果string result = grade > grade1 ? "不买糖" : "买糖";// 输出决定结果c out << result << endl;return 0;
}
c ode>
ckquote> 字符串的拼接 使用运算符更新
ckquote>
<c ode c lass="prism language-c ++">#inc lude "iostream"
using namespac e std;
//输入一个字符串c ;输出字符串的拼接
int main(){string arr = "123456789";string arr2 = "abc defgh";int arr1 = 15;string arr3 = arr + arr2 + to_string(arr1);c out << arr3 << endl;return 0;
}
c ode>
3、控制结构
C++的控制结构用于控制程序的执行流程c ;包括条件语句、循环语句和跳转语句。以下是这些控制结构的详细用法:
1. 条件语句
if-else
<c ode c lass="prism language-c pp">class="token keyword">if class="token punc tuation">( c onditionclass="token punc tuation">) class="token punc tuation">{ class="token c omment">// 如果条件为真c ;执行这里的代码块
class="token punc tuation">} class="token keyword">else class="token punc tuation">{ class="token c omment">// 如果条件为假c ;执行这里的代码块
class="token punc tuation">}
c ode>
<c ode c lass="prism language-c pp">class="token mac ro property">class="token direc tive-hash"># class="token direc tive keyword">inc lude class="token string"><iostream>
class="token keyword">int class="token func tion">main class="token punc tuation">( class="token punc tuation">) class="token punc tuation">{ class="token keyword">int num class="token operator">= class="token number">5 class="token punc tuation">; class="token keyword">if class="token punc tuation">( num class="token operator">> class="token number">0 class="token punc tuation">) class="token punc tuation">{ stdclass="token double-c olon punc tuation">:: c out class="token operator"><< class="token string">"Number is positive." class="token operator"><< stdclass="token double-c olon punc tuation">:: endlclass="token punc tuation">; class="token punc tuation">} class="token keyword">else class="token punc tuation">{ stdclass="token double-c olon punc tuation">:: c out class="token operator"><< class="token string">"Number is non-positive." class="token operator"><< stdclass="token double-c olon punc tuation">:: endlclass="token punc tuation">; class="token punc tuation">} class="token keyword">return class="token number">0 class="token punc tuation">;
class="token punc tuation">}
c ode>
c h_273">switc h
<c ode c lass="prism language-c pp">class="token keyword">switc h class="token punc tuation">( expressionclass="token punc tuation">) class="token punc tuation">{ class="token keyword">c ase value1class="token operator">: class="token c omment">// 如果expression的值等于value1c ;执行这里的代码块 class="token keyword">break class="token punc tuation">; class="token keyword">c ase value2class="token operator">: class="token c omment">// 如果expression的值等于value2c ;执行这里的代码块 class="token keyword">break class="token punc tuation">; class="token c omment">// ... 其他情况 class="token keyword">default class="token operator">: class="token c omment">// 如果expression的值不匹配任何c asec ;执行这里的代码块 class="token keyword">break class="token punc tuation">;
class="token punc tuation">}
c ode>
<c ode c lass="prism language-c pp">class="token mac ro property">class="token direc tive-hash"># class="token direc tive keyword">inc lude class="token string"><iostream>
class="token keyword">int class="token func tion">main class="token punc tuation">( class="token punc tuation">) class="token punc tuation">{ class="token keyword">int day class="token operator">= class="token number">3 class="token punc tuation">; class="token keyword">switc h class="token punc tuation">( dayclass="token punc tuation">) class="token punc tuation">{ class="token keyword">c ase class="token number">1 class="token operator">: stdclass="token double-c olon punc tuation">:: c out class="token operator"><< class="token string">"Monday" class="token operator"><< stdclass="token double-c olon punc tuation">:: endlclass="token punc tuation">; class="token keyword">break class="token punc tuation">; class="token keyword">c ase class="token number">2 class="token operator">: stdclass="token double-c olon punc tuation">:: c out class="token operator"><< class="token string">"Tuesday" class="token operator"><< stdclass="token double-c olon punc tuation">:: endlclass="token punc tuation">; class="token keyword">break class="token punc tuation">; class="token keyword">c ase class="token number">3 class="token operator">: stdclass="token double-c olon punc tuation">:: c out class="token operator"><< class="token string">"Wednesday" class="token operator"><< stdclass="token double-c olon punc tuation">:: endlclass="token punc tuation">; class="token keyword">break class="token punc tuation">; class="token keyword">default class="token operator">: stdclass="token double-c olon punc tuation">:: c out class="token operator"><< class="token string">"Invalid day" class="token operator"><< stdclass="token double-c olon punc tuation">:: endlclass="token punc tuation">; class="token punc tuation">} class="token keyword">return class="token number">0 class="token punc tuation">;
class="token punc tuation">}
c ode>
2. 循环语句
for
<c ode c lass="prism language-c pp">class="token keyword">for class="token punc tuation">( initializationclass="token punc tuation">; c onditionclass="token punc tuation">; inc rementclass="token operator">/ dec rementclass="token punc tuation">) class="token punc tuation">{ class="token c omment">// 循环体代码
class="token punc tuation">}
c ode>
<c ode c lass="prism language-c pp">class="token mac ro property">class="token direc tive-hash"># class="token direc tive keyword">inc lude class="token string"><iostream>
class="token keyword">int class="token func tion">main class="token punc tuation">( class="token punc tuation">) class="token punc tuation">{ class="token keyword">for class="token punc tuation">( class="token keyword">int i class="token operator">= class="token number">0 class="token punc tuation">; i class="token operator">< class="token number">10 class="token punc tuation">; class="token operator">++ iclass="token punc tuation">) class="token punc tuation">{ stdclass="token double-c olon punc tuation">:: c out class="token operator"><< i class="token operator"><< stdclass="token double-c olon punc tuation">:: endlclass="token punc tuation">; class="token punc tuation">} class="token keyword">return class="token number">0 class="token punc tuation">;
class="token punc tuation">}
c ode>
while
<c ode c lass="prism language-c pp">class="token keyword">while class="token punc tuation">( c onditionclass="token punc tuation">) class="token punc tuation">{ class="token c omment">// 循环体代码
class="token punc tuation">}
c ode>
<c ode c lass="prism language-c pp">class="token mac ro property">class="token direc tive-hash"># class="token direc tive keyword">inc lude class="token string"><iostream>
class="token keyword">int class="token func tion">main class="token punc tuation">( class="token punc tuation">) class="token punc tuation">{ class="token keyword">int i class="token operator">= class="token number">0 class="token punc tuation">; class="token keyword">while class="token punc tuation">( i class="token operator">< class="token number">10 class="token punc tuation">) class="token punc tuation">{ stdclass="token double-c olon punc tuation">:: c out class="token operator"><< i class="token operator"><< stdclass="token double-c olon punc tuation">:: endlclass="token punc tuation">; class="token operator">++ iclass="token punc tuation">; class="token punc tuation">} class="token keyword">return class="token number">0 class="token punc tuation">;
class="token punc tuation">}
c ode>
do-while
<c ode c lass="prism language-c pp">class="token keyword">do class="token punc tuation">{ class="token c omment">// 循环体代码
class="token punc tuation">} class="token keyword">while class="token punc tuation">( c onditionclass="token punc tuation">) class="token punc tuation">;
c ode>
<c ode c lass="prism language-c pp">class="token mac ro property">class="token direc tive-hash"># class="token direc tive keyword">inc lude class="token string"><iostream>
class="token keyword">int class="token func tion">main class="token punc tuation">( class="token punc tuation">) class="token punc tuation">{ class="token keyword">int i class="token operator">= class="token number">0 class="token punc tuation">; class="token keyword">do class="token punc tuation">{ stdclass="token double-c olon punc tuation">:: c out class="token operator"><< i class="token operator"><< stdclass="token double-c olon punc tuation">:: endlclass="token punc tuation">; class="token operator">++ iclass="token punc tuation">; class="token punc tuation">} class="token keyword">while class="token punc tuation">( i class="token operator">< class="token number">10 class="token punc tuation">) class="token punc tuation">; class="token keyword">return class="token number">0 class="token punc tuation">;
class="token punc tuation">}
c ode>
3. 跳转语句
break
<c ode c lass="prism language-c pp">class="token mac ro property">class="token direc tive-hash"># class="token direc tive keyword">inc lude class="token string"><iostream>
class="token keyword">int class="token func tion">main class="token punc tuation">( class="token punc tuation">) class="token punc tuation">{ class="token keyword">for class="token punc tuation">( class="token keyword">int i class="token operator">= class="token number">0 class="token punc tuation">; i class="token operator">< class="token number">10 class="token punc tuation">; class="token operator">++ iclass="token punc tuation">) class="token punc tuation">{ class="token keyword">if class="token punc tuation">( i class="token operator">== class="token number">5 class="token punc tuation">) class="token punc tuation">{ class="token keyword">break class="token punc tuation">; class="token c omment">// 当 i 等于 5 时c ;终止循环 class="token punc tuation">} stdclass="token double-c olon punc tuation">:: c out class="token operator"><< i class="token operator"><< stdclass="token double-c olon punc tuation">:: endlclass="token punc tuation">; class="token punc tuation">} class="token keyword">return class="token number">0 class="token punc tuation">;
class="token punc tuation">}
c ode>
c ontinue_399">c ontinue
<c ode c lass="prism language-c pp">class="token mac ro property">class="token direc tive-hash"># class="token direc tive keyword">inc lude class="token string"><iostream>
class="token keyword">int class="token func tion">main class="token punc tuation">( class="token punc tuation">) class="token punc tuation">{ class="token keyword">for class="token punc tuation">( class="token keyword">int i class="token operator">= class="token number">0 class="token punc tuation">; i class="token operator">< class="token number">10 class="token punc tuation">; class="token operator">++ iclass="token punc tuation">) class="token punc tuation">{ class="token keyword">if class="token punc tuation">( i class="token operator">== class="token number">5 class="token punc tuation">) class="token punc tuation">{ class="token keyword">c ontinue class="token punc tuation">; class="token c omment">// 当 i 等于 5 时c ;跳过本次循环的剩余部分 class="token punc tuation">} stdclass="token double-c olon punc tuation">:: c out class="token operator"><< i class="token operator"><< stdclass="token double-c olon punc tuation">:: endlclass="token punc tuation">; class="token punc tuation">} class="token keyword">return class="token number">0 class="token punc tuation">;
class="token punc tuation">}
c ode>
goto(不推荐使用)
由于 goto 语句可能导致代码难以理解和维护c ;因此现代编程中通常不推荐使用它。但在某些特殊情况下c ;它仍然可能存在。
<c ode c lass="prism language-c pp">class="token mac ro property">class="token direc tive-hash"># class="token direc tive keyword">inc lude class="token string"><iostream> class="token keyword">int class="token func tion">main class="token punc tuation">( class="token punc tuation">) class="token punc tuation">{ class="token keyword">int i class="token operator">= class="token number">0 class="token punc tuation">; class="token keyword">if class="token punc tuation">( i class="token operator">== class="token number">0 class="token punc tuation">) class="token punc tuation">{ class="token keyword">goto skipclass="token punc tuation">; class="token c omment">// 跳转到标签 "skip" class="token punc tuation">} stdclass="token double-c olon punc tuation">:: c out class="token operator"><< class="token string">"This will not be printed." class="token operator"><< stdclass="token double-c olon punc tuation">:: endlclass="token punc tuation">; skipclass="token operator">: class="token c omment">// 标签 "skip" stdclass="token double-c olon punc tuation">:: c out class="token operator"><< class="token string">"This will be printed." class="token operator"><< stdclass="token double-c olon punc tuation">:: endlclass="token punc tuation">; class="token keyword">return class="token number">0 class="token punc tuation">;
class="token punc tuation">}
c ode>
4、数组、指针、引用和结构体
1.数组
在C++中c ;数组是用于存储固定数量相同类型元素的集合。这些元素在内存中连续存储c ;这意味着数组的地址是连续的c ;并可以通过索引来访问。数组在C++中是一个基本的数据结构c ;广泛应用于各种编程任务中。
1.声明数组
在C++中c ;可以使用以下语法来声明数组:
<c ode c lass="prism language-c pp">dataType arrayNameclass="token punc tuation">[ arraySizeclass="token punc tuation">] class="token punc tuation">;
c ode>
其中c ;<c ode>dataTypec ode> 是数组中元素的类型(如 <c ode>intc ode>, <c ode>floatc ode>, <c ode>c harc ode> 等)c ;<c ode>arrayNamec ode> 是数组的名称c ;<c ode>arraySizec ode> 是一个常量表达式c ;表示数组中元素的数量。
下面是个数组定义实例
<c ode c lass="prism language-c pp">class="token mac ro property">class="token direc tive-hash"># class="token direc tive keyword">inc lude class="token string">"iostream"
class="token mac ro property">class="token direc tive-hash"># class="token direc tive keyword">inc lude class="token string">"random"
class="token keyword">using class="token keyword">namespac e stdclass="token punc tuation">; class="token c omment">//定义指定范围的随机数
class="token keyword">int class="token func tion">random class="token punc tuation">( class="token keyword">int minclass="token punc tuation">, class="token keyword">int maxclass="token punc tuation">) class="token punc tuation">{ random_devic e rdclass="token punc tuation">; mt19937 class="token func tion">gen class="token punc tuation">( class="token func tion">rd class="token punc tuation">( class="token punc tuation">) class="token punc tuation">) class="token punc tuation">; uniform_int_distributionclass="token operator">< class="token keyword">int class="token operator">> class="token func tion">dis class="token punc tuation">( minclass="token punc tuation">, maxclass="token punc tuation">) class="token punc tuation">; class="token keyword">return class="token func tion">dis class="token punc tuation">( genclass="token punc tuation">) class="token punc tuation">;
class="token punc tuation">} class="token keyword">int GuessArrclass="token punc tuation">[ class="token number">10 class="token punc tuation">] class="token punc tuation">; class="token keyword">int class="token func tion">main class="token punc tuation">( class="token punc tuation">) class="token punc tuation">{ class="token keyword">int num class="token operator">= class="token func tion">random class="token punc tuation">( class="token number">1 class="token punc tuation">, class="token number">10 class="token punc tuation">) class="token punc tuation">; class="token keyword">int c ount class="token operator">= class="token number">0 class="token punc tuation">; class="token keyword">for class="token punc tuation">( class="token keyword">int i class="token operator">= class="token number">0 class="token punc tuation">; i class="token operator">< class="token number">10 class="token punc tuation">; class="token operator">++ iclass="token punc tuation">) class="token punc tuation">{ c out class="token operator"><< class="token string">"请输入第" class="token operator"><< i class="token operator">+ class="token number">1 class="token operator"><< class="token string">"个数字:" class="token punc tuation">; c in class="token operator">>> GuessArrclass="token punc tuation">[ iclass="token punc tuation">] class="token punc tuation">; class="token punc tuation">} class="token keyword">for class="token punc tuation">( class="token keyword">int j class="token operator">: GuessArrclass="token punc tuation">) class="token punc tuation">{ c out class="token operator"><< j class="token operator"><< class="token string">"\t" class="token punc tuation">; class="token punc tuation">} class="token keyword">for class="token punc tuation">( class="token keyword">int k class="token operator">: GuessArrclass="token punc tuation">) class="token punc tuation">{ class="token keyword">if class="token punc tuation">( k class="token operator">== numclass="token punc tuation">) class="token punc tuation">{ c ountclass="token operator">++ class="token punc tuation">; class="token punc tuation">} class="token punc tuation">} c out class="token operator"><< class="token string">"猜对了" class="token operator"><< c ount class="token operator"><< class="token string">"个" class="token operator"><< endlclass="token punc tuation">; class="token keyword">return class="token number">0 class="token punc tuation">;
class="token punc tuation">}
c ode>
数组的名称实质上数组第一个元素的地址。
除此之外c ;数组还有一维数组c ;二维数组以及多维数组。
<c ode c lass="prism language-c pp">class="token keyword">int arrnameclass="token punc tuation">[ class="token number">2 class="token punc tuation">] class="token punc tuation">[ class="token number">2 class="token punc tuation">] class="token operator">= class="token punc tuation">{ class="token punc tuation">{ class="token number">1 class="token punc tuation">, class="token number">2 class="token punc tuation">} class="token punc tuation">, class="token punc tuation">{ class="token number">3 class="token punc tuation">, class="token number">4 class="token punc tuation">} class="token punc tuation">} class="token punc tuation">;
c ode>
可以理解拆分为了两个一维数组的嵌套c ;这两个一维数组都是两个元素。
2.初始化数组
在声明数组时c ;可以为其指定初始值。这可以在声明时通过花括号 <c ode>{}c ode> 来完成。
<c ode c lass="prism language-c pp">class="token keyword">int myArrayclass="token punc tuation">[ class="token number">5 class="token punc tuation">] class="token operator">= class="token punc tuation">{ class="token number">1 class="token punc tuation">, class="token number">2 class="token punc tuation">, class="token number">3 class="token punc tuation">, class="token number">4 class="token punc tuation">, class="token number">5 class="token punc tuation">} class="token punc tuation">;
c ode>
如果初始化时提供的元素数量少于数组的大小c ;那么剩余的元素将被初始化为该类型的默认值(对于内置类型c ;通常是0或空字符)。
<c ode c lass="prism language-c pp">class="token keyword">int anotherArrayclass="token punc tuation">[ class="token number">10 class="token punc tuation">] class="token operator">= class="token punc tuation">{ class="token number">1 class="token punc tuation">, class="token number">2 class="token punc tuation">, class="token number">3 class="token punc tuation">} class="token punc tuation">; class="token c omment">// 其他元素将被初始化为0
c ode>
3.访问数组元素
可以通过索引来访问数组中的元素。索引从0开始c ;到数组大小减1结束。
<c ode c lass="prism language-c pp">stdclass="token double-c olon punc tuation">:: c out class="token operator"><< myArrayclass="token punc tuation">[ class="token number">0 class="token punc tuation">] class="token punc tuation">; class="token c omment">// 输出1
stdclass="token double-c olon punc tuation">:: c out class="token operator"><< myArrayclass="token punc tuation">[ class="token number">4 class="token punc tuation">] class="token punc tuation">; class="token c omment">// 输出5
stdclass="token double-c olon punc tuation">:: c out class="token operator"><< arrnameclass="token punc tuation">[ class="token number">0 class="token punc tuation">] class="token punc tuation">[ class="token number">0 class="token punc tuation">] class="token c omment">// 输出1
c ode>
4.数组长度的计算
数组长度可以通过函数进行计算
<c ode c lass="prism language-c pp">class="token keyword">sizeof class="token punc tuation">( arrclass="token punc tuation">) class="token punc tuation">; class="token c omment">// 通过sizeof 计算数组的总长度
class="token keyword">sizeof class="token punc tuation">( arrclass="token punc tuation">[ class="token number">0 class="token punc tuation">] class="token punc tuation">) class="token punc tuation">; class="token c omment">// 计算单个元素的长度
length class="token operator">= class="token keyword">sizeof class="token punc tuation">( arrclass="token punc tuation">) class="token operator">/ class="token keyword">sizeof class="token punc tuation">( arrclass="token punc tuation">[ class="token number">0 class="token punc tuation">] class="token punc tuation">) class="token punc tuation">; class="token c omment">// 数组元素的个数
c ode>
6.数组的遍历
数组在遍历的过程中可以通过for循环遍历。
<c ode c lass="prism language-c pp">class="token keyword">int arrnameclass="token punc tuation">[ class="token number">4 class="token punc tuation">] class="token operator">= class="token punc tuation">{ class="token number">1 class="token punc tuation">, class="token number">2 class="token punc tuation">, class="token number">3 class="token punc tuation">, class="token number">4 class="token punc tuation">} class="token punc tuation">; class="token keyword">for class="token punc tuation">( class="token keyword">int i class="token operator">= class="token number">0 class="token punc tuation">; i class="token operator">< class="token number">4 class="token punc tuation">; iclass="token operator">++ class="token punc tuation">)
class="token punc tuation">{ c out class="token operator"><< arrnameclass="token punc tuation">[ iclass="token punc tuation">] class="token operator"><< endlclass="token punc tuation">;
class="token punc tuation">}
c ode>
也可以通过C++的新标准进行遍历c ;如:
<c ode c lass="prism language-c pp">class="token keyword">for class="token punc tuation">( class="token keyword">int j class="token operator">: GuessArrclass="token punc tuation">) class="token punc tuation">{ c out class="token operator"><< j class="token operator"><< class="token string">"\t" class="token punc tuation">; class="token punc tuation">} class="token c omment">// 这里的GuessArr为数组名
c ode>
遍历多维数组则需要多个for循环嵌套。
<c ode c lass="prism language-c pp">class="token keyword">int arrclass="token punc tuation">[ class="token number">2 class="token punc tuation">] class="token punc tuation">[ class="token number">2 class="token punc tuation">] class="token operator">= class="token punc tuation">{ class="token punc tuation">{ class="token number">1 class="token punc tuation">, class="token number">2 class="token punc tuation">} class="token punc tuation">, class="token punc tuation">{ class="token number">3 class="token punc tuation">, class="token number">4 class="token punc tuation">} class="token punc tuation">} class="token punc tuation">; class="token keyword">for class="token punc tuation">( class="token keyword">int i class="token operator">= class="token number">0 class="token punc tuation">; i class="token operator">< class="token keyword">sizeof class="token punc tuation">( arrclass="token punc tuation">) class="token operator">/ class="token keyword">sizeof class="token punc tuation">( arrclass="token punc tuation">[ class="token number">0 class="token punc tuation">] class="token punc tuation">) class="token punc tuation">; iclass="token operator">++ class="token punc tuation">) class="token punc tuation">{ class="token keyword">for class="token punc tuation">( class="token keyword">int j class="token operator">= class="token number">0 class="token punc tuation">; j class="token operator">< class="token keyword">sizeof class="token punc tuation">( arrclass="token punc tuation">[ class="token number">0 class="token punc tuation">] class="token punc tuation">) class="token operator">/ class="token keyword">sizeof class="token punc tuation">( arrclass="token punc tuation">[ class="token number">0 class="token punc tuation">] class="token punc tuation">[ class="token number">0 class="token punc tuation">] class="token punc tuation">) class="token punc tuation">; j class="token operator">++ class="token punc tuation">) class="token punc tuation">{ c out class="token operator"><< arrclass="token punc tuation">[ iclass="token punc tuation">] class="token punc tuation">[ jclass="token punc tuation">] class="token punc tuation">; class="token punc tuation">} class="token punc tuation">}
c ode>
多维数组遍历就需要多少层的遍历。
7.数组越界
需要注意的是c ;C++不会自动检查数组索引是否越界。如果尝试访问超出数组范围的元素c ;将会导致未定义的行为c ;这通常是严重的错误。因此c ;在编写代码时c ;应始终确保索引在有效范围内。
2.结构体
结构体(struc t)是一种复合数据类型c ;它允许你将多个不同类型的变量组合成一个单独的类型。
1.定义结构体
使用<c ode>struc tc ode>关键字来定义结构体。结构体内部可以包含多个不同类型的变量(称为成员)。
<c ode c lass="prism language-c pp">class="token keyword">struc t 结构体名称 class="token punc tuation">{ 数据类型 成员变量class="token number">1 class="token punc tuation">; 数据类型 成员变量class="token number">2 class="token punc tuation">; class="token c omment">// ...
class="token punc tuation">} class="token punc tuation">;
c ode>
2.访问结构体成员
通过结构体变量使用<c ode>.c ode>操作符来访问结构体中的成员。
<c ode c lass="prism language-c pp">结构体变量class="token punc tuation">. 成员变量名class="token punc tuation">;
c ode>
3.结构体变量的定义和初始化
可以在定义结构体变量的同时初始化其成员。
<c ode c lass="prism language-c pp">class="token keyword">struc t 结构体名称 变量名 class="token operator">= class="token punc tuation">{ 初始化值class="token number">1 class="token punc tuation">, 初始化值class="token number">2 class="token punc tuation">, class="token punc tuation">. class="token punc tuation">. class="token punc tuation">. class="token punc tuation">} class="token punc tuation">;
c ode>
如果结构体变量在定义时没有初始化c ;其成员将自动被初始化为0(对于基本类型)或空指针(对于指针类型)。
4.定义结构体
首先定义结构体类型和成员。
<c ode c lass="prism language-c pp">class="token keyword">struc t class="token c lass-name">Student class="token punc tuation">{ class="token keyword">c har nameclass="token punc tuation">[ class="token number">50 class="token punc tuation">] class="token punc tuation">; class="token keyword">int ageclass="token punc tuation">; class="token keyword">float sc oreclass="token punc tuation">;
class="token punc tuation">} class="token punc tuation">;
c ode>
5.创建结构体变量
使用结构体类型创建变量c ;并初始化(如果需要)。
<c ode c lass="prism language-c pp">class="token keyword">struc t class="token c lass-name">Student stu1 class="token operator">= class="token punc tuation">{ class="token string">"Alic e" class="token punc tuation">, class="token number">20 class="token punc tuation">, class="token number">90.5 class="token punc tuation">} class="token punc tuation">;
class="token keyword">struc t class="token c lass-name">Student stu2class="token punc tuation">; class="token c omment">// 未初始化
c ode>
6.访问和修改成员
通过结构体变量来访问和修改其成员。
<c ode c lass="prism language-c pp">class="token func tion">printf class="token punc tuation">( class="token string">"Name: %s\n" class="token punc tuation">, stu1class="token punc tuation">. nameclass="token punc tuation">) class="token punc tuation">;
stu1class="token punc tuation">. age class="token operator">= class="token number">21 class="token punc tuation">;
c ode>
7.结构体数组
可以定义结构体数组c ;用于存储多个具有相同类型属性的对象。
<c ode c lass="prism language-c pp">class="token keyword">struc t class="token c lass-name">Student studentsclass="token punc tuation">[ class="token number">3 class="token punc tuation">] class="token operator">= class="token punc tuation">{ class="token punc tuation">{ class="token string">"Alic e" class="token punc tuation">, class="token number">20 class="token punc tuation">, class="token number">90.5 class="token punc tuation">} class="token punc tuation">, class="token punc tuation">{ class="token string">"Bob" class="token punc tuation">, class="token number">21 class="token punc tuation">, class="token number">85.0 class="token punc tuation">} class="token punc tuation">, class="token punc tuation">{ class="token string">"Charlie" class="token punc tuation">, class="token number">19 class="token punc tuation">, class="token number">92.0 class="token punc tuation">}
class="token punc tuation">} class="token punc tuation">;
c ode>
8.结构体指针
可以使用指针来访问结构体变量c ;这在处理大型结构体或需要动态分配内存时非常有用。
<c ode c lass="prism language-c pp">class="token keyword">struc t class="token c lass-name">Student class="token operator">* p class="token operator">= class="token operator">& stu1class="token punc tuation">;
p class="token operator">-> nameclass="token punc tuation">; class="token c omment">// 使用->操作符访问指针指向的结构体成员
c ode>
9.结构体嵌套
一个结构体的成员可以是另一个结构体类型。
<c ode c lass="prism language-c pp">class="token keyword">struc t class="token c lass-name">Address class="token punc tuation">{ class="token keyword">c har streetclass="token punc tuation">[ class="token number">100 class="token punc tuation">] class="token punc tuation">; class="token keyword">c har c ityclass="token punc tuation">[ class="token number">50 class="token punc tuation">] class="token punc tuation">; class="token keyword">c har c ountryclass="token punc tuation">[ class="token number">50 class="token punc tuation">] class="token punc tuation">;
class="token punc tuation">} class="token punc tuation">; class="token keyword">struc t class="token c lass-name">Person class="token punc tuation">{ class="token keyword">c har nameclass="token punc tuation">[ class="token number">50 class="token punc tuation">] class="token punc tuation">; class="token keyword">int ageclass="token punc tuation">; class="token keyword">struc t class="token c lass-name">Address addressclass="token punc tuation">; class="token c omment">// 嵌套的结构体成员
class="token punc tuation">} class="token punc tuation">;
c ode>
在C++中c ;结构体是一种非常有用的工具c ;它允许你组织和管理相关的数据。通过使用结构体c ;你可以创建更复杂的数据类型c ;并编写更易于理解和维护的代码。
3、指针
1.指针的定义
在C++中c ;指针是一个变量c ;其值为另一个变量的地址。通过使用指针c ;你可以直接访问和操作内存中的特定位置。
以下是C++中指针的基本定义方式:
<c ode c lass="prism language-c pp">class="token c omment">// 定义一个整数类型的指针变量p
class="token keyword">int class="token operator">* pclass="token punc tuation">; class="token c omment">// 或者在定义的同时初始化
class="token keyword">int x class="token operator">= class="token number">10 class="token punc tuation">;
class="token keyword">int class="token operator">* ptr class="token operator">= class="token operator">& xclass="token punc tuation">; class="token c omment">// ptr现在指向x的地址
c ode>
在上面的代码中:
<c ode>int* p;c ode> 定义了一个名为 <c ode>pc ode> 的指针变量c ;它可以存储一个 <c ode>intc ode> 类型变量的地址。 <c ode>int* ptr = &x;c ode> 定义了一个名为 <c ode>ptrc ode> 的指针变量c ;并立即将其初始化为 <c ode>xc ode> 的地址(使用 <c ode>&c ode> 运算符获取 <c ode>xc ode> 的地址)。
一旦你有了指向某个变量的指针c ;你就可以使用该指针来访问或修改该变量的值。例如:
<c ode c lass="prism language-c pp">class="token operator">* ptr class="token operator">= class="token number">20 class="token punc tuation">; class="token c omment">// 使用*运算符来访问ptr指向的值c ;并将其设置为20
stdclass="token double-c olon punc tuation">:: c out class="token operator"><< xclass="token punc tuation">; class="token c omment">// 输出: 20c ;因为ptr指向xc ;我们改变了x的值
c ode>
需要注意的是c ;指针操作应该非常小心c ;因为不正确的指针操作可能导致程序崩溃、数据损坏或其他未定义的行为。确保在使用指针之前已经正确地初始化了它c ;并且在不再需要它时将其设置为 <c ode>nullptrc ode> 或将其删除(如果是指向动态分配的内存)。
2.指针的运算
指针变量存放的是变量的地址c ;对变量进行*(解引用)运算c ;可以获得该地址下变量的值。
<c ode c lass="prism language-c pp">class="token mac ro property">class="token direc tive-hash"># class="token direc tive keyword">inc lude class="token string">"iostream"
class="token keyword">using class="token keyword">namespac e stdclass="token punc tuation">;
class="token c omment">//指针变量存放的是变量的地址c ;对变量进行*运算c ;可以获得该地址下变量的值
class="token keyword">int class="token func tion">main class="token punc tuation">( class="token punc tuation">) class="token punc tuation">{ class="token keyword">int arrclass="token punc tuation">[ class="token number">10 class="token punc tuation">] class="token operator">= class="token punc tuation">{ class="token number">1 class="token punc tuation">, class="token number">2 class="token punc tuation">, class="token number">3 class="token punc tuation">, class="token number">4 class="token punc tuation">, class="token number">5 class="token punc tuation">, class="token number">6 class="token punc tuation">, class="token number">7 class="token punc tuation">, class="token number">8 class="token punc tuation">, class="token number">9 class="token punc tuation">, class="token number">10 class="token punc tuation">} class="token punc tuation">; class="token keyword">c har strclass="token punc tuation">[ class="token number">10 class="token punc tuation">] class="token operator">= class="token punc tuation">{ class="token c har">'a' class="token punc tuation">, class="token c har">'b' class="token punc tuation">, class="token c har">'c ' class="token punc tuation">, class="token c har">'d' class="token punc tuation">, class="token c har">'e' class="token punc tuation">, class="token c har">'f' class="token punc tuation">, class="token c har">'g' class="token punc tuation">, class="token c har">'h' class="token punc tuation">, class="token c har">'i' class="token punc tuation">, class="token c har">'j' class="token punc tuation">} class="token punc tuation">; class="token keyword">int class="token operator">* p class="token operator">= arrclass="token punc tuation">; class="token keyword">c har class="token operator">* q class="token operator">= strclass="token punc tuation">; class="token keyword">for class="token punc tuation">( class="token keyword">int i class="token operator">= class="token number">0 class="token punc tuation">; i class="token operator">< class="token number">10 class="token punc tuation">; iclass="token operator">++ class="token punc tuation">) class="token punc tuation">{ c out class="token operator"><< class="token operator">* p class="token operator"><< class="token string">" " class="token operator"><< class="token operator">* q class="token operator"><< endlclass="token punc tuation">; pclass="token operator">++ class="token punc tuation">; qclass="token operator">++ class="token punc tuation">; class="token punc tuation">} class="token keyword">return class="token number">0 class="token punc tuation">;
class="token punc tuation">}
c ode>
3.结构体指针
在C++中c ;结构体(通常被称为类或结构体c ;但在C++中更常使用“类”这一术语)是一种复合数据类型c ;它允许你将多个不同类型的变量组合成一个单一的类型。然而c ;为了与C语言保持一致c ;C++也支持传统的<c ode>struc tc ode>关键字来定义结构体。
当你使用结构体指针时c ;你实际上是在指向一个结构体类型的内存地址。这允许你通过指针来访问和修改结构体的成员。
以下是一个使用C++结构体指针的简单示例:
<c ode c lass="prism language-c pp">class="token mac ro property">class="token direc tive-hash"># class="token direc tive keyword">inc lude class="token string"><iostream> class="token c omment">// 定义一个结构体
class="token keyword">struc t class="token c lass-name">Student class="token punc tuation">{ stdclass="token double-c olon punc tuation">:: string nameclass="token punc tuation">; class="token keyword">int ageclass="token punc tuation">; class="token keyword">float gpaclass="token punc tuation">;
class="token punc tuation">} class="token punc tuation">; class="token keyword">int class="token func tion">main class="token punc tuation">( class="token punc tuation">) class="token punc tuation">{ class="token c omment">// 在堆上分配一个Student结构体的实例 Studentclass="token operator">* ptr class="token operator">= class="token keyword">new Studentclass="token punc tuation">; class="token c omment">// 通过指针访问和修改结构体的成员 ptrclass="token operator">-> name class="token operator">= class="token string">"Alic e" class="token punc tuation">; ptrclass="token operator">-> age class="token operator">= class="token number">20 class="token punc tuation">; ptrclass="token operator">-> gpa class="token operator">= class="token number">3.5f class="token punc tuation">; class="token c omment">// 打印结构体的内容 stdclass="token double-c olon punc tuation">:: c out class="token operator"><< class="token string">"Name: " class="token operator"><< ptrclass="token operator">-> name class="token operator"><< stdclass="token double-c olon punc tuation">:: endlclass="token punc tuation">; stdclass="token double-c olon punc tuation">:: c out class="token operator"><< class="token string">"Age: " class="token operator"><< ptrclass="token operator">-> age class="token operator"><< stdclass="token double-c olon punc tuation">:: endlclass="token punc tuation">; stdclass="token double-c olon punc tuation">:: c out class="token operator"><< class="token string">"GPA: " class="token operator"><< ptrclass="token operator">-> gpa class="token operator"><< stdclass="token double-c olon punc tuation">:: endlclass="token punc tuation">; class="token c omment">// 释放分配的内存 class="token keyword">delete ptrclass="token punc tuation">; class="token keyword">return class="token number">0 class="token punc tuation">;
class="token punc tuation">}
c ode>
在这个示例中c ;我们首先定义了一个名为<c ode>Studentc ode>的结构体c ;它包含三个成员:一个字符串<c ode>namec ode>c ;一个整数<c ode>agec ode>和一个浮点数<c ode>gpac ode>。然后c ;在<c ode>mainc ode>函数中c ;我们使用<c ode>newc ode>操作符在堆上分配了一个<c ode>Studentc ode>结构体的实例c ;并将返回的指针存储在<c ode>ptrc ode>中。接下来c ;我们通过<c ode>ptrc ode>来访问和修改结构体的成员。最后c ;我们使用<c ode>deletec ode>操作符来释放分配的内存。
在访问结构体指针的时要使用<c ode>->c ode>操作。
4.结构体指针数组
在C++中c ;可以创建一个结构体指针数组c ;这意味着数组的每个元素都是一个指向结构体的指针。这种数据结构在需要存储多个结构体实例c ;但可能不希望在创建时立即分配所有内存的情况下特别有用。
以下是一个使用C++结构体指针数组的示例:
<c ode c lass="prism language-c pp">class="token mac ro property">class="token direc tive-hash"># class="token direc tive keyword">inc lude class="token string"><iostream>
class="token mac ro property">class="token direc tive-hash"># class="token direc tive keyword">inc lude class="token string"><string> class="token c omment">// 定义一个结构体
class="token keyword">struc t class="token c lass-name">Student class="token punc tuation">{ stdclass="token double-c olon punc tuation">:: string nameclass="token punc tuation">; class="token keyword">int ageclass="token punc tuation">; class="token keyword">float gpaclass="token punc tuation">;
class="token punc tuation">} class="token punc tuation">; class="token keyword">int class="token func tion">main class="token punc tuation">( class="token punc tuation">) class="token punc tuation">{ class="token c omment">// 创建一个包含5个Student指针的数组 Studentclass="token operator">* studentsclass="token punc tuation">[ class="token number">5 class="token punc tuation">] class="token punc tuation">; class="token c omment">// 为数组中的每个元素分配内存并初始化 class="token keyword">for class="token punc tuation">( class="token keyword">int i class="token operator">= class="token number">0 class="token punc tuation">; i class="token operator">< class="token number">5 class="token punc tuation">; class="token operator">++ iclass="token punc tuation">) class="token punc tuation">{ studentsclass="token punc tuation">[ iclass="token punc tuation">] class="token operator">= class="token keyword">new Studentclass="token punc tuation">; class="token c omment">// 假设我们有一些数据 studentsclass="token punc tuation">[ iclass="token punc tuation">] class="token operator">-> name class="token operator">= class="token string">"Student " class="token operator">+ stdclass="token double-c olon punc tuation">:: class="token func tion">to_string class="token punc tuation">( i class="token operator">+ class="token number">1 class="token punc tuation">) class="token punc tuation">; studentsclass="token punc tuation">[ iclass="token punc tuation">] class="token operator">-> age class="token operator">= class="token number">20 class="token operator">+ iclass="token punc tuation">; studentsclass="token punc tuation">[ iclass="token punc tuation">] class="token operator">-> gpa class="token operator">= class="token number">3.0f class="token operator">+ class="token punc tuation">( i class="token operator">% class="token number">3 class="token punc tuation">) class="token operator">* class="token number">0.5f class="token punc tuation">; class="token c omment">// 为了使GPA不同 class="token punc tuation">} class="token c omment">// 遍历数组并打印每个学生的信息 class="token keyword">for class="token punc tuation">( class="token keyword">int i class="token operator">= class="token number">0 class="token punc tuation">; i class="token operator">< class="token number">5 class="token punc tuation">; class="token operator">++ iclass="token punc tuation">) class="token punc tuation">{ stdclass="token double-c olon punc tuation">:: c out class="token operator"><< class="token string">"Name: " class="token operator"><< studentsclass="token punc tuation">[ iclass="token punc tuation">] class="token operator">-> name class="token operator"><< stdclass="token double-c olon punc tuation">:: endlclass="token punc tuation">; stdclass="token double-c olon punc tuation">:: c out class="token operator"><< class="token string">"Age: " class="token operator"><< studentsclass="token punc tuation">[ iclass="token punc tuation">] class="token operator">-> age class="token operator"><< stdclass="token double-c olon punc tuation">:: endlclass="token punc tuation">; stdclass="token double-c olon punc tuation">:: c out class="token operator"><< class="token string">"GPA: " class="token operator"><< studentsclass="token punc tuation">[ iclass="token punc tuation">] class="token operator">-> gpa class="token operator"><< stdclass="token double-c olon punc tuation">:: endlclass="token punc tuation">; stdclass="token double-c olon punc tuation">:: c out class="token operator"><< class="token string">"-----" class="token operator"><< stdclass="token double-c olon punc tuation">:: endlclass="token punc tuation">; class="token punc tuation">} class="token c omment">// 释放每个结构体实例占用的内存 class="token keyword">for class="token punc tuation">( class="token keyword">int i class="token operator">= class="token number">0 class="token punc tuation">; i class="token operator">< class="token number">5 class="token punc tuation">; class="token operator">++ iclass="token punc tuation">) class="token punc tuation">{ class="token keyword">delete studentsclass="token punc tuation">[ iclass="token punc tuation">] class="token punc tuation">; class="token punc tuation">} class="token keyword">return class="token number">0 class="token punc tuation">;
class="token punc tuation">}
c ode>
在这个示例中c ;我们首先定义了一个结构体<c ode>Studentc ode>。在<c ode>mainc ode>函数中c ;我们创建了一个名为<c ode>studentsc ode>的数组c ;该数组包含5个指向<c ode>Studentc ode>的指针。然后c ;我们使用一个循环为数组中的每个指针分配内存c ;并初始化每个结构体的成员。接下来c ;我们遍历数组并打印每个学生的信息。最后c ;我们使用另一个循环来释放每个结构体实例占用的内存。
注意c ;由于我们使用了<c ode>newc ode>来分配内存c ;因此必须使用<c ode>deletec ode>来释放它c ;以防止内存泄漏。在这个例子中c ;我们在创建和销毁每个<c ode>Studentc ode>实例时都使用了显式的内存管理。然而c ;在更复杂的应用程序中c ;使用智能指针(如<c ode>std::unique_ptrc ode>或<c ode>std::shared_ptrc ode>)可能是一个更好的选择c ;因为它们可以自动管理内存c ;并减少因忘记释放内存而导致的错误。
<c ode c lass="prism language-c pp">class="token mac ro property">class="token direc tive-hash"># class="token direc tive keyword">inc lude class="token string">"iostream"
class="token keyword">using class="token keyword">namespac e stdclass="token punc tuation">; class="token keyword">struc t class="token c lass-name">Student class="token punc tuation">{ string nameclass="token punc tuation">; class="token keyword">int ageclass="token punc tuation">{ class="token punc tuation">} class="token punc tuation">; class="token keyword">int sc oreclass="token punc tuation">{ class="token punc tuation">} class="token punc tuation">;
class="token punc tuation">} class="token punc tuation">; class="token keyword">int class="token func tion">main class="token punc tuation">( class="token punc tuation">) class="token punc tuation">{ class="token keyword">struc t class="token c lass-name">Student stuclass="token punc tuation">[ class="token number">3 class="token punc tuation">] class="token operator">= class="token punc tuation">{ class="token punc tuation">{ class="token string">"张三" class="token punc tuation">, class="token number">18 class="token punc tuation">, class="token number">100 class="token punc tuation">} class="token punc tuation">, class="token punc tuation">{ class="token string">"李四" class="token punc tuation">, class="token number">19 class="token punc tuation">, class="token number">99 class="token punc tuation">} class="token punc tuation">, class="token punc tuation">{ class="token string">"王五" class="token punc tuation">, class="token number">20 class="token punc tuation">, class="token number">98 class="token punc tuation">} class="token punc tuation">} class="token punc tuation">; class="token keyword">struc t class="token c lass-name">Student class="token operator">* p class="token operator">= stuclass="token punc tuation">;
class="token c omment">// for (int i = 0; i < 3; ++i) {
class="token c omment">// c out << p->name << " " << p->age << " " << p->sc ore << endl;
class="token c omment">// p++;
class="token c omment">// } class="token keyword">for class="token punc tuation">( class="token keyword">int i class="token operator">= class="token number">0 class="token punc tuation">; i class="token operator">< class="token number">3 class="token punc tuation">; class="token operator">++ iclass="token punc tuation">) class="token punc tuation">{ c out class="token operator"><< pclass="token punc tuation">[ iclass="token punc tuation">] class="token punc tuation">. name class="token operator"><< class="token string">" " class="token operator"><< pclass="token punc tuation">[ iclass="token punc tuation">] class="token punc tuation">. age class="token operator"><< class="token string">" " class="token operator"><< pclass="token punc tuation">[ iclass="token punc tuation">] class="token punc tuation">. sc ore class="token operator"><< endlclass="token punc tuation">; class="token punc tuation">} class="token keyword">auto class="token operator">* p2 class="token operator">= class="token keyword">new class="token keyword">struc t class="token c lass-name">Student class="token punc tuation">[ class="token number">3 class="token punc tuation">] class="token punc tuation">{ class="token punc tuation">{ class="token string">"张三" class="token punc tuation">, class="token number">18 class="token punc tuation">, class="token number">100 class="token punc tuation">} class="token punc tuation">, class="token punc tuation">{ class="token string">"李四" class="token punc tuation">, class="token number">19 class="token punc tuation">, class="token number">99 class="token punc tuation">} class="token punc tuation">, class="token punc tuation">{ class="token string">"王五" class="token punc tuation">, class="token number">20 class="token punc tuation">, class="token number">98 class="token punc tuation">} class="token punc tuation">} class="token punc tuation">; class="token keyword">for class="token punc tuation">( class="token keyword">int i class="token operator">= class="token number">0 class="token punc tuation">; i class="token operator">< class="token number">3 class="token punc tuation">; class="token operator">++ iclass="token punc tuation">) class="token punc tuation">{ c out class="token operator"><< p2class="token punc tuation">[ iclass="token punc tuation">] class="token punc tuation">. name class="token operator"><< class="token string">" " class="token operator"><< p2class="token punc tuation">[ iclass="token punc tuation">] class="token punc tuation">. age class="token operator"><< class="token string">" " class="token operator"><< p2class="token punc tuation">[ iclass="token punc tuation">] class="token punc tuation">. sc ore class="token operator"><< endlclass="token punc tuation">; class="token punc tuation">} class="token keyword">delete class="token punc tuation">[ class="token punc tuation">] p2class="token punc tuation">; class="token keyword">return class="token number">0 class="token punc tuation">;
class="token punc tuation">} c ode>
在这个示例中c ;定义了一个指向结构体数组的指针c ;此时访问时c ;<c ode>p[i]c ode>中的元素是结构体c ;故需要使用<c ode>.c ode>操作。
5.数组元素的插入
数组元素的插入实质上是将原始数组的元素以及需要添加的元素传入新的数组。
<c ode c lass="prism language-c pp">class="token c omment">//
class="token c omment">// Created by 86189 on 2024/5/24.
class="token c omment">//
class="token mac ro property">class="token direc tive-hash"># class="token direc tive keyword">inc lude class="token string">"iostream"
class="token keyword">using class="token keyword">namespac e stdclass="token punc tuation">; class="token keyword">int class="token func tion">main class="token punc tuation">( class="token punc tuation">) class="token punc tuation">{ class="token keyword">int class="token operator">* arr class="token operator">= class="token keyword">new class="token keyword">int class="token punc tuation">[ class="token number">10 class="token punc tuation">] class="token punc tuation">{ class="token number">1 class="token punc tuation">, class="token number">2 class="token punc tuation">, class="token number">3 class="token punc tuation">, class="token number">4 class="token punc tuation">, class="token number">5 class="token punc tuation">, class="token number">6 class="token punc tuation">, class="token number">7 class="token punc tuation">, class="token number">8 class="token punc tuation">, class="token number">9 class="token punc tuation">, class="token number">10 class="token punc tuation">} class="token punc tuation">; class="token keyword">int class="token operator">* NewArr class="token operator">= class="token keyword">new class="token keyword">int class="token punc tuation">[ class="token number">12 class="token punc tuation">] class="token punc tuation">; class="token keyword">int offset class="token operator">= class="token number">0 class="token punc tuation">; class="token keyword">for class="token punc tuation">( class="token keyword">int i class="token operator">= class="token number">0 class="token punc tuation">; i class="token operator">< class="token number">12 class="token punc tuation">; iclass="token operator">++ class="token punc tuation">) class="token punc tuation">{ class="token keyword">if class="token punc tuation">( i class="token operator">== class="token number">1 class="token punc tuation">) class="token punc tuation">{ offsetclass="token operator">++ class="token punc tuation">; NewArrclass="token punc tuation">[ iclass="token punc tuation">] class="token operator">= class="token number">2 class="token punc tuation">; class="token keyword">c ontinue class="token punc tuation">; class="token punc tuation">} class="token keyword">else class="token keyword">if class="token punc tuation">( i class="token operator">== class="token number">4 class="token punc tuation">) class="token punc tuation">{ offsetclass="token operator">++ class="token punc tuation">; NewArrclass="token punc tuation">[ iclass="token punc tuation">] class="token operator">= class="token number">5 class="token punc tuation">; class="token keyword">c ontinue class="token punc tuation">; class="token punc tuation">} NewArrclass="token punc tuation">[ iclass="token punc tuation">] class="token operator">= arrclass="token punc tuation">[ iclass="token operator">- offsetclass="token punc tuation">] class="token punc tuation">; class="token punc tuation">} class="token keyword">for class="token punc tuation">( class="token keyword">int i class="token operator">= class="token number">0 class="token punc tuation">; i class="token operator">< class="token number">10 class="token punc tuation">; class="token operator">++ iclass="token punc tuation">) class="token punc tuation">{ c out class="token operator"><< arrclass="token punc tuation">[ iclass="token punc tuation">] class="token operator"><< class="token string">" " class="token punc tuation">; class="token punc tuation">} c out class="token operator"><< endlclass="token punc tuation">; class="token keyword">for class="token punc tuation">( class="token keyword">int i class="token operator">= class="token number">0 class="token punc tuation">; i class="token operator">< class="token number">12 class="token punc tuation">; class="token operator">++ iclass="token punc tuation">) class="token punc tuation">{ c out class="token operator"><< NewArrclass="token punc tuation">[ iclass="token punc tuation">] class="token operator"><< class="token string">" " class="token punc tuation">; class="token punc tuation">} class="token keyword">delete class="token punc tuation">[ class="token punc tuation">] arr class="token punc tuation">, class="token keyword">delete class="token punc tuation">[ class="token punc tuation">] NewArrclass="token punc tuation">; class="token keyword">return class="token number">0 class="token punc tuation">;
class="token punc tuation">}
c ode>
实例中定义了中间值<c ode>offsetc ode>来表示数组元素插入过程中插入元素的个数c ;例如示例中在1位置和4位置插入c ;则原始数组下标为1的元素则需要填入新数组下标为2的位置。
5.数组元素的删除
移除数组元素本质上仍然是将原始数组减少元素后c ;传入新的数组。
<c ode c lass="prism language-c pp">class="token mac ro property">class="token direc tive-hash"># class="token direc tive keyword">inc lude class="token string">"iostream"
class="token keyword">using class="token keyword">namespac e stdclass="token punc tuation">; class="token keyword">int class="token func tion">main class="token punc tuation">( class="token punc tuation">) class="token punc tuation">{ class="token c omment">//定义一个数组c ;并赋值 class="token keyword">int class="token operator">* arr class="token operator">= class="token keyword">new class="token keyword">int class="token punc tuation">[ class="token number">5 class="token punc tuation">] class="token punc tuation">{ class="token number">1 class="token punc tuation">, class="token number">2 class="token punc tuation">, class="token number">3 class="token punc tuation">, class="token number">4 class="token punc tuation">, class="token number">5 class="token punc tuation">} class="token punc tuation">; class="token keyword">int class="token operator">* NewArr class="token operator">= class="token keyword">new class="token keyword">int class="token punc tuation">[ class="token number">3 class="token punc tuation">] class="token punc tuation">; class="token keyword">int offset class="token operator">= class="token number">0 class="token punc tuation">; class="token keyword">for class="token punc tuation">( class="token keyword">int i class="token operator">= class="token number">0 class="token punc tuation">; i class="token operator">< class="token number">5 class="token punc tuation">; iclass="token operator">++ class="token punc tuation">) class="token punc tuation">{ class="token keyword">if class="token punc tuation">( i class="token operator">== class="token number">0 class="token operator">|| i class="token operator">== class="token number">3 class="token punc tuation">) class="token punc tuation">{ offsetclass="token operator">++ class="token punc tuation">; class="token keyword">c ontinue class="token punc tuation">; class="token punc tuation">} NewArrclass="token punc tuation">[ iclass="token operator">- offsetclass="token punc tuation">] class="token operator">= arrclass="token punc tuation">[ iclass="token punc tuation">] class="token punc tuation">; class="token punc tuation">} class="token keyword">for class="token punc tuation">( class="token keyword">int i class="token operator">= class="token number">0 class="token punc tuation">; i class="token operator">< class="token number">3 class="token punc tuation">; iclass="token operator">++ class="token punc tuation">) class="token punc tuation">{ c out class="token operator"><< NewArrclass="token punc tuation">[ iclass="token punc tuation">] class="token operator"><< class="token string">" " class="token punc tuation">; class="token punc tuation">} class="token keyword">delete class="token punc tuation">[ class="token punc tuation">] arr class="token punc tuation">, class="token keyword">delete class="token punc tuation">[ class="token punc tuation">] NewArrclass="token punc tuation">; class="token keyword">return class="token number">0 class="token punc tuation">;
class="token punc tuation">}
c ode>
4.常量指针
<c ode>c onstc ode>用来修饰常量指针。
<c ode c lass="prism language-c pp">class="token mac ro property">class="token direc tive-hash"># class="token direc tive keyword">inc lude class="token string">"iostream"
class="token keyword">using class="token keyword">namespac e stdclass="token punc tuation">; class="token keyword">int class="token func tion">main class="token punc tuation">( class="token punc tuation">) class="token punc tuation">{ class="token keyword">int num1 class="token operator">= class="token number">10 class="token punc tuation">, num2 class="token operator">= class="token number">20 class="token punc tuation">; class="token c omment">//指向常量的指针 存储值不可变 指向可变 class="token keyword">c onst class="token keyword">int class="token operator">* p class="token operator">= class="token operator">& num1class="token punc tuation">; class="token c omment">//*P = 100; 不可更改值 p class="token operator">= class="token operator">& num2class="token punc tuation">; class="token c omment">// 可以更改指针指向 c out class="token operator"><< class="token operator">* p class="token operator"><< endlclass="token punc tuation">; class="token c omment">//常量指针 class="token keyword">int class="token operator">* class="token keyword">c onst p1 class="token operator">= class="token operator">& num1class="token punc tuation">; class="token operator">* p1 class="token operator">= class="token number">100 class="token punc tuation">; class="token c omment">// 可以更改值 class="token c omment">// p1 = &num2; 不可更改指针指向 c out class="token operator"><< class="token operator">* p1 class="token operator"><< endlclass="token punc tuation">; class="token c omment">//指向常量的常量指针 class="token keyword">c onst class="token keyword">int class="token operator">* class="token keyword">c onst p2 class="token operator">= class="token operator">& num1class="token punc tuation">; class="token c omment">//*P2 = 100;值不可变 class="token c omment">//p2 = &num2; 指针指向不可变 c out class="token operator"><< class="token operator">* p2 class="token operator"><< endlclass="token punc tuation">; class="token keyword">return class="token number">0 class="token punc tuation">;
class="token punc tuation">}
c ode>
5.new运算符
new运算符用来开辟内存空间。但需要自己手动删除。
例如:开辟数组内存空间。
<c ode c lass="prism language-c pp"> class="token keyword">int class="token operator">* arr class="token operator">= class="token keyword">new class="token keyword">int class="token punc tuation">[ class="token number">5 class="token punc tuation">] class="token punc tuation">{ class="token number">1 class="token punc tuation">, class="token number">2 class="token punc tuation">, class="token number">3 class="token punc tuation">, class="token number">4 class="token punc tuation">, class="token number">5 class="token punc tuation">} class="token punc tuation">; class="token keyword">int class="token operator">* NewArr class="token operator">= class="token keyword">new class="token keyword">int class="token punc tuation">[ class="token number">3 class="token punc tuation">] class="token punc tuation">; class="token keyword">delete class="token punc tuation">[ class="token punc tuation">] arr class="token punc tuation">, class="token keyword">delete class="token punc tuation">[ class="token punc tuation">] NewArrclass="token punc tuation">;
c ode>
开辟指针空间。
<c ode c lass="prism language-c pp"> Studentclass="token operator">* ptr class="token operator">= class="token keyword">new Studentclass="token punc tuation">; class="token keyword">delete ptrclass="token punc tuation">;
c ode>
4、引用
引用不建议作为函数返回值。
引用可以看作为变量取得别名c ;操作引用变量等同于操作原始变量c ;由于引用的这种特性c ;则引用在定义时必须赋值c ;即初始化。
<c ode c lass="prism language-c pp">class="token mac ro property">class="token direc tive-hash"># class="token direc tive keyword">inc lude class="token string">"iostream"
class="token keyword">using class="token keyword">namespac e stdclass="token punc tuation">; class="token c omment">//编写应用引用的示例代码
class="token keyword">int class="token func tion">main class="token punc tuation">( class="token punc tuation">) class="token punc tuation">{ class="token keyword">int a class="token operator">= class="token number">10 class="token punc tuation">; class="token keyword">int class="token operator">& b class="token operator">= aclass="token punc tuation">; c out class="token operator"><< class="token string">"a = " class="token operator"><< a class="token operator"><< endlclass="token punc tuation">; c out class="token operator"><< class="token string">"b = " class="token operator"><< b class="token operator"><< endlclass="token punc tuation">; b class="token operator">= class="token number">20 class="token punc tuation">; class="token c omment">//改变引用的值c ;也会改变原始变量a的值 c out class="token operator"><< class="token string">"a = " class="token operator"><< a class="token operator"><< endlclass="token punc tuation">; c out class="token operator"><< class="token string">"b = " class="token operator"><< b class="token operator"><< endlclass="token punc tuation">; class="token keyword">return class="token number">0 class="token punc tuation">;
class="token punc tuation">}
c ode>
5、函数
当涉及到C++的基础函数知识时c ;以下是一些核心概念和示例:
1. 函数定义和调用
定义 :
<c ode c lass="prism language-c pp">class="token c omment">// 定义一个函数c ;计算两个整数的和
class="token keyword">int class="token func tion">add class="token punc tuation">( class="token keyword">int aclass="token punc tuation">, class="token keyword">int bclass="token punc tuation">) class="token punc tuation">{ class="token keyword">return a class="token operator">+ bclass="token punc tuation">;
class="token punc tuation">} class="token c omment">// 主函数
class="token keyword">int class="token func tion">main class="token punc tuation">( class="token punc tuation">) class="token punc tuation">{ class="token c omment">// 调用函数 class="token keyword">int sum class="token operator">= class="token func tion">add class="token punc tuation">( class="token number">5 class="token punc tuation">, class="token number">3 class="token punc tuation">) class="token punc tuation">; stdclass="token double-c olon punc tuation">:: c out class="token operator"><< class="token string">"Sum: " class="token operator"><< sum class="token operator"><< stdclass="token double-c olon punc tuation">:: endlclass="token punc tuation">; class="token keyword">return class="token number">0 class="token punc tuation">;
class="token punc tuation">}
c ode>
2. 函数参数
示例 :带有参数的函数
<c ode c lass="prism language-c pp">class="token c omment">// 定义一个函数c ;计算两个数的乘积
class="token keyword">int class="token func tion">multiply class="token punc tuation">( class="token keyword">int xclass="token punc tuation">, class="token keyword">int yclass="token punc tuation">) class="token punc tuation">{ class="token keyword">return x class="token operator">* yclass="token punc tuation">;
class="token punc tuation">} class="token c omment">// 主函数
class="token keyword">int class="token func tion">main class="token punc tuation">( class="token punc tuation">) class="token punc tuation">{ class="token c omment">// 调用函数c ;传递参数 class="token keyword">int result class="token operator">= class="token func tion">multiply class="token punc tuation">( class="token number">7 class="token punc tuation">, class="token number">2 class="token punc tuation">) class="token punc tuation">; stdclass="token double-c olon punc tuation">:: c out class="token operator"><< class="token string">"Result: " class="token operator"><< result class="token operator"><< stdclass="token double-c olon punc tuation">:: endlclass="token punc tuation">; class="token keyword">return class="token number">0 class="token punc tuation">;
class="token punc tuation">}
c ode>
3. 函数的返回值
示例 :返回值的函数
<c ode c lass="prism language-c pp">class="token c omment">// 定义一个函数c ;判断一个数是否为偶数
class="token keyword">bool class="token func tion">isEven class="token punc tuation">( class="token keyword">int numclass="token punc tuation">) class="token punc tuation">{ class="token keyword">return num class="token operator">% class="token number">2 class="token operator">== class="token number">0 class="token punc tuation">;
class="token punc tuation">} class="token c omment">// 主函数
class="token keyword">int class="token func tion">main class="token punc tuation">( class="token punc tuation">) class="token punc tuation">{ class="token c omment">// 调用函数c ;并使用返回值 class="token keyword">bool isEvenNumber class="token operator">= class="token func tion">isEven class="token punc tuation">( class="token number">10 class="token punc tuation">) class="token punc tuation">; class="token keyword">if class="token punc tuation">( isEvenNumberclass="token punc tuation">) class="token punc tuation">{ stdclass="token double-c olon punc tuation">:: c out class="token operator"><< class="token string">"10 is even." class="token operator"><< stdclass="token double-c olon punc tuation">:: endlclass="token punc tuation">; class="token punc tuation">} class="token keyword">else class="token punc tuation">{ stdclass="token double-c olon punc tuation">:: c out class="token operator"><< class="token string">"10 is not even." class="token operator"><< stdclass="token double-c olon punc tuation">:: endlclass="token punc tuation">; class="token punc tuation">} class="token keyword">return class="token number">0 class="token punc tuation">;
class="token punc tuation">}
c ode>
4. 函数指针
示例 :使用函数指针
<c ode c lass="prism language-c pp">class="token c omment">// 定义两个函数
class="token keyword">void class="token func tion">func 1 class="token punc tuation">( class="token punc tuation">) class="token punc tuation">{ stdclass="token double-c olon punc tuation">:: c out class="token operator"><< class="token string">"Func tion 1 c alled." class="token operator"><< stdclass="token double-c olon punc tuation">:: endlclass="token punc tuation">;
class="token punc tuation">} class="token keyword">void class="token func tion">func 2 class="token punc tuation">( class="token punc tuation">) class="token punc tuation">{ stdclass="token double-c olon punc tuation">:: c out class="token operator"><< class="token string">"Func tion 2 c alled." class="token operator"><< stdclass="token double-c olon punc tuation">:: endlclass="token punc tuation">;
class="token punc tuation">} class="token c omment">// 主函数
class="token keyword">int class="token func tion">main class="token punc tuation">( class="token punc tuation">) class="token punc tuation">{ class="token c omment">// 定义函数指针 class="token keyword">void class="token punc tuation">( class="token operator">* func Ptrclass="token punc tuation">) class="token punc tuation">( class="token punc tuation">) class="token punc tuation">; class="token c omment">// 分配函数给指针 func Ptr class="token operator">= func 1class="token punc tuation">; class="token func tion">func Ptr class="token punc tuation">( class="token punc tuation">) class="token punc tuation">; class="token c omment">// 输出 "Func tion 1 c alled." func Ptr class="token operator">= func 2class="token punc tuation">; class="token func tion">func Ptr class="token punc tuation">( class="token punc tuation">) class="token punc tuation">; class="token c omment">// 输出 "Func tion 2 c alled." class="token keyword">return class="token number">0 class="token punc tuation">;
class="token punc tuation">}
c ode>
5.函数传参
1. 值传递(Pass by Value)
值传递形参无法修饰实参c ;在值传递中c ;函数接收的是参数值的副本。这意味着在函数内部对参数所做的任何修改都不会影响到传递给函数的原始变量。
示例 :
<c ode c lass="prism language-c pp">class="token mac ro property">class="token direc tive-hash"># class="token direc tive keyword">inc lude class="token string"><iostream> class="token keyword">void class="token func tion">modifyValue class="token punc tuation">( class="token keyword">int numclass="token punc tuation">) class="token punc tuation">{ num class="token operator">= num class="token operator">+ class="token number">10 class="token punc tuation">; class="token c omment">// 修改的是num的副本c ;原始变量不受影响 stdclass="token double-c olon punc tuation">:: c out class="token operator"><< class="token string">"Inside func tion: " class="token operator"><< num class="token operator"><< stdclass="token double-c olon punc tuation">:: endlclass="token punc tuation">;
class="token punc tuation">} class="token keyword">int class="token func tion">main class="token punc tuation">( class="token punc tuation">) class="token punc tuation">{ class="token keyword">int x class="token operator">= class="token number">5 class="token punc tuation">; stdclass="token double-c olon punc tuation">:: c out class="token operator"><< class="token string">"Before func tion c all: " class="token operator"><< x class="token operator"><< stdclass="token double-c olon punc tuation">:: endlclass="token punc tuation">; class="token func tion">modifyValue class="token punc tuation">( xclass="token punc tuation">) class="token punc tuation">; class="token c omment">// 传递x的值给函数 stdclass="token double-c olon punc tuation">:: c out class="token operator"><< class="token string">"After func tion c all: " class="token operator"><< x class="token operator"><< stdclass="token double-c olon punc tuation">:: endlclass="token punc tuation">; class="token c omment">// x的值仍然是5 class="token keyword">return class="token number">0 class="token punc tuation">;
class="token punc tuation">}
c ode>
c e_1133">2. 地址传递(Pass by Referenc e)
在地址传递中c ;函数接收的是参数的地址(引用)c ;而不是参数值的副本。因此c ;在函数内部对参数所做的任何修改都会影响到传递给函数的原始变量。
示例 :
<c ode c lass="prism language-c pp">class="token mac ro property">class="token direc tive-hash"># class="token direc tive keyword">inc lude class="token string"><iostream> class="token keyword">void class="token func tion">modifyReferenc e class="token punc tuation">( class="token keyword">int class="token operator">& numclass="token punc tuation">) class="token punc tuation">{ class="token c omment">// 使用&表示引用传递void mod(int * p) num class="token operator">= num class="token operator">+ class="token number">10 class="token punc tuation">; class="token c omment">// 修改的是原始变量 stdclass="token double-c olon punc tuation">:: c out class="token operator"><< class="token string">"Inside func tion: " class="token operator"><< num class="token operator"><< stdclass="token double-c olon punc tuation">:: endlclass="token punc tuation">;
class="token punc tuation">} class="token keyword">int class="token func tion">main class="token punc tuation">( class="token punc tuation">) class="token punc tuation">{ class="token keyword">int x class="token operator">= class="token number">5 class="token punc tuation">; stdclass="token double-c olon punc tuation">:: c out class="token operator"><< class="token string">"Before func tion c all: " class="token operator"><< x class="token operator"><< stdclass="token double-c olon punc tuation">:: endlclass="token punc tuation">; class="token func tion">modifyReferenc e class="token punc tuation">( xclass="token punc tuation">) class="token punc tuation">; class="token c omment">// 传递x的引用给函数modi(&x) stdclass="token double-c olon punc tuation">:: c out class="token operator"><< class="token string">"After func tion c all: " class="token operator"><< x class="token operator"><< stdclass="token double-c olon punc tuation">:: endlclass="token punc tuation">; class="token c omment">// x的值现在是15 class="token keyword">return class="token number">0 class="token punc tuation">;
class="token punc tuation">}
c ode>
注意事项 :
引用传递通常用于大型对象或需要修改原始数据的场景c ;因为它可以避免复制对象c ;从而提高效率。 引用传递时c ;必须确保传递给函数的引用是有效的c ;并且引用在函数执行期间不会失效(例如c ;引用的对象没有被销毁)。 引用传递也可以用于常量引用(<c ode>c onst int&c ode>)c ;这样可以在不修改原始数据的情况下传递数据。
常量引用示例 :
<c ode c lass="prism language-c pp">class="token mac ro property">class="token direc tive-hash"># class="token direc tive keyword">inc lude class="token string"><iostream> class="token keyword">void class="token func tion">printValue class="token punc tuation">( class="token keyword">c onst class="token keyword">int class="token operator">& numclass="token punc tuation">) class="token punc tuation">{ class="token c omment">// 使用c onst表示引用不会修改数据 stdclass="token double-c olon punc tuation">:: c out class="token operator"><< class="token string">"Inside func tion: " class="token operator"><< num class="token operator"><< stdclass="token double-c olon punc tuation">:: endlclass="token punc tuation">;
class="token punc tuation">} class="token keyword">int class="token func tion">main class="token punc tuation">( class="token punc tuation">) class="token punc tuation">{ class="token keyword">int x class="token operator">= class="token number">5 class="token punc tuation">; class="token func tion">printValue class="token punc tuation">( xclass="token punc tuation">) class="token punc tuation">; class="token c omment">// 传递x的常量引用给函数 class="token keyword">return class="token number">0 class="token punc tuation">;
class="token punc tuation">}
c ode>
在这个例子中c ;<c ode>printValuec ode>函数接收一个常量引用c ;这意味着它不能修改<c ode>numc ode>的值。这增加了代码的安全性c ;因为它防止了函数意外地修改原始数据。