当前位置: 首页 > news >正文

手袋 技术支持 东莞网站建设网站建设是指什么

手袋 技术支持 东莞网站建设,网站建设是指什么,公司网站建设合同 华律网,腾讯云建设网站视频文章目录 1.C指针1.1 定义指针1.2 使用指针 2.空指针和野指针2.1 空指针2.2 野指针 3.指针所占空间4.使用const修饰指针4.1 const修饰指针4.2 const修饰常量4.3 const 既修饰指针也修饰常量 5.指针操作数组6.指针做函数参数7.使用指针知识实现冒泡排序 1.C指针 指针其实就是一… 文章目录 1.C指针1.1 定义指针1.2 使用指针 2.空指针和野指针2.1 空指针2.2 野指针 3.指针所占空间4.使用const修饰指针4.1 const修饰指针4.2 const修饰常量4.3 const 既修饰指针也修饰常量 5.指针操作数组6.指针做函数参数7.使用指针知识实现冒泡排序 1.C指针 指针其实就是一块地址可以用来保存我们想要访问或者修改的变量地址当我们需要访问或者修改保存的地址时直接通过指针变量去操作就可以了。 1.1 定义指针 定义指针的语法也很简单数据类型 *指针变量名 ,比如定义一个整型指针变量 int* p; 假设我们要为指针变量赋值我们需要用的取地址符,如下面代码所示 int a 10;int* p;p a;如上面代码所示我们定义了一个变量a,一个指针变量p,并且把a的地址保存到指针变量p中。 1.2 使用指针 我们定义了指针变量并且赋值后应该如何读取指针变量保存的地址对应的值呢也就是假设我们定义了一个整型变量a赋值为10一个指针变量p,将变量a的地址赋给p,这时我们应该如何去通过指针p访问修改a的值呢这时就需要用到指针的解引用了需要用到符号*,代码如下所示 #includeiostream using namespace std;int main() {int a 10;// 定义指针语法数据类型 *指针变量名int* p;// 让指针记录变量a的地址p a;// 2.使用指针cout a的值未被修改前 a endl;*p 100;cout a的地址: (int) a endl;cout 指针p为 p endl;cout 指针指向的值为a a ,*p *p endl;system(pause);return 0; }运行结果 如上面代码所示为了对比我们打印出了变量a之前的值并且我们打印出了指针p的值可以看到指针p是一个地址然后是使用*p 100的方式访问并修改了指针变量中保存的地址对应的值而指针变量p中保存的地址正是a的地址所以修改的其实是a的值。所以a的值变成了100 注意可以通过解引用的方式来找到指针指向的内存*p的方式就是解引用这样可以访问指针变量中保存的地址对应的值 2.空指针和野指针 2.1 空指针 空指针就是指针变量指向的内存编号为0的空间我们可以使用空指针来初始化指针变量比如 int *p NULL;,这里需要注意的是空指针指向的内存是不可以被访问的例如 int *p NULL; *p 100;// 错误上面的代码会导致程序报空指针异常 这是因为空指针指向的内存是不可以访问的,0~255之间的内存是系统占用的不可以访问访问的话就会报异常。 2.2 野指针 野指针就是指针变量指向非法的内存空间例如我们定义了一个指针变量int* p (int*)0x1100;,而0x1100这个地址我们不知道是谁的就胡乱指的这种情况特别危险假设这块地址有重要数据我们随便一指然后一改就会导致重要数据丢失所以野指针需要被避免。假设我们强制访问未知内存则会报异常 所以我们尽量去访问自己申请的空间空指针和野指针都不是我们申请的空间因此不要访问 3.指针所占空间 现在我们知道了指针其实就是一块地址它用于保存操作其他变量的地址简单说它就是用来保存地址的所以它占的空间不需要太大根据操作系统的位数不同指针占的空间也不一样在32位操作系统上指针占4个字节在64位操作系统上指针占8个字节所有的类型都一样不管是整型指针还是浮点型指针都是一样的验证的代码如下所示。 #includeiostream using namespace std;int main() {// 指针所占内存空间32位操作系统下占用4个字节。64位下占用8个字节cout size of (int*) sizeof(int *) endl;cout size of (float*) sizeof(float *) endl;cout size of (double*) sizeof(double *) endl;cout size of (char*) sizeof(char*) endl;system(pause);return 0; }运行结果 如上面代码和运行结果可知各个类型的指针都是占8个字节因为我的操作系统是64位的。读者也可以验证下自己的操作系统下指针占多上字节。 4.使用const修饰指针 我们都知道const是表示常量的意思在C中被这个关键字修饰的变量是不可以被修改的和Java的final关键字一样因为指针可以访问并修改内存中的值这样可能会引起安全问题所以可以使用const关键字控制指针对内存的修改。const修饰指针主要有三种 4.1 const修饰指针 const修饰指针称为常量指针例如const int *p;,常量指针的特点就是指针指向的值不可以被修改但是指针的指向可以修改如下代码所示 #includeiostream using namespace std; int main() {// const 修饰指针,常量指针int a 10;int b 10;const int* p a;// 指针指向的值不可以改指针的指向可以改*p 20;// 错误常量指针指向的值不可以修改编译会报错p b;//正确常量指针指向的值可以修改system(pause);return 0; }如果强制修改无法编译通过 4.2 const修饰常量 const修饰常量称为指针常量例如int * const p;,指针常量的特点就是指针的指向不可以改指针指向的值可以改如下面代码所示 #includeiostream using namespace std; int main() {int a 10;int b 10;int* const p2 a;*p2 20; // 正确指针常量指向的值可以修改p2 b; // 错误 指针常量的指向不可以改编译会报错system(pause);return 0; }4.3 const 既修饰指针也修饰常量 当const既修饰指针也修饰常量的时候例如 const int * const p;,这时候指针的指向和值都不允许修改。如下代码所示 #includeiostream using namespace std; int main() {int a 10;int b 10;const int* const p3 a;*p3 100;// 错误p3 b; // 错误system(pause);return 0; }5.指针操作数组 指针其实也可以用来访问数组遍历数组在C中数组名称就是数组的首地址而数组的存储是连续的所以我们只要把这个首地址给到指针变量就可以操作遍历这个数组了如下面代码所示 #includeiostream using namespace std; int main() {// 利用指针访问数组中的元素int arr[10] { 1,2,3,4,5,6,7,8,9,10 };cout first Element: arr[0] endl;int* p arr;//数组名就是数组的首地址cout 指针访问第一个元素 *p endl;p; // 让指针向后偏移一个元素所占的字节数cout 指针访问第二个元素 *p endl;cout 利用指针遍历数组 endl;int* p2 arr;for (int i 0; i 10; i) {cout *p2 endl;p2;}system(pause);return 0; }运行结果 6.指针做函数参数 指针可以用来做函数的参数这样可以实现真正的操作传进来的参数原始实参的值我们给函数传递参数时有两种方式一种是值传递传递过去的是值这个值的修改不会影响原始的实际值另一种方式是地址传递这种传递方式传递的是地址假设我们修改了这个地址对应的值那么就会影响原始变量的值。举个例子实现两个数交换我们使用值传递的方式代码如下 #includeiostream using namespace std; void swap(int a, int b) {int tmp a;a b;b tmp;cout swap a a endl;cout swap b b endl; } int main() {// 指针作为函数参数// 1、值传递int a 10;int b 20;swap(a, b);// 实参没有改变cout a a endl;cout b b endl;system(pause);return 0; }运行结果 我们可以看到虽然在swap函数种的值已经交换了但是我们的原始变量a,b的值还是没有变化。我们使用地址传递的方式代码如下 #includeiostream using namespace std; void swap1(int* p1, int* p2) {int tmp *p1;*p1 *p2;*p2 tmp; } int main() {int a 10;int b 20;// 地址传递: 可以修改实参swap1(a, b);cout 地址传递a a endl;cout 地址传递b b endl;system(pause);return 0; }运行结果 如上面的代码所示我们传递参数的时候将参数的地址传递给函数在swap1函数中解析出地址对应的值并且做交换这样就能修改原始实参的值了。所以指针做函数参数其实就是一种地址传递。 7.使用指针知识实现冒泡排序 学习完指针我们用指针做一个冒泡排序的算法。代码如下所示 #includeiostream using namespace std; // 参数1数组首地址参数2数组长度 void bubbleSort(int* arr, int len) {for (int i 0; i len - 1; i) {for (int j 0; j len - i - 1; j) {// 如果jj1的值就交换if(arr[j] arr[j 1]){int tmp arr[j];arr[j] arr[j 1];arr[j 1] tmp;}}} } void printArr(int *arr,int len) {for (int i 0; i len; i) {cout arr[i] endl;} } int main() {// 利用冒泡排序对整型数组进行升序排序// 1.先创建数组int arr[10] { 1,3,2,5,7,1,9,10,7,13 };// 2.创建函数实现冒泡排序int len sizeof(arr) / sizeof(arr[0]);bubbleSort(arr, len);// 3.打印结果printArr(arr,len);system(pause);return 0; }运行结果
http://icebutterfly214.com/news/37986/

相关文章:

  • 读社会工程:安全体系中的人性漏洞(第2版)01初探
  • newDay21
  • 2025年广东军事化训练学校/机构最新TOP5权威评测:铸就坚毅品格,领航成长之路
  • 使用 vLLM 本地部署 Qwen3-Embedding-8B 模型并接入 Dify 完整指南 - yi
  • 《VS Code:高效编程的插件与配置》
  • 11-13午夜盘思
  • Windows 修改hosts不生效
  • 早就下好了IEDA,也算是差生文具多了
  • 旋转矩阵在导航与机器人中的应用
  • 基于Java+SSM+Flask家庭理财系统(源码+LW+调试文档+讲解等)/家庭理财/理财系统/家庭财务/家庭财务规划/家庭账目/家庭财务软件/家庭记账/理财器具/财务多元化/资产管理。
  • 杂记 - 2
  • [USACO24JAN] Cowlendar S题解
  • 2025.11.12 周作业 43(并非)速通
  • 题解:P1393 Mivik 的标题
  • 11.13 程序员的修炼之道:从小工到专家 第五章 弯曲或折断 - GENGAR
  • 题解:P3813 [FJOI2017] 矩阵填数
  • linux USB --- 监听 USB 角色
  • 2025 年 11 月电力金具厂家最新推荐,精准检测与稳定性能深度解析!
  • 2025.11.13
  • 一句话奶牛
  • react-window API完全手册:参数、方法与事件全解析 - 指南
  • Imbalance
  • #20232329 2025-2026-1 《网络与系统攻防技术》 实验六实验报告
  • 20232322 2025-2026-1 《网络与系统攻防技术》实验五实验报告
  • 贝叶斯优化之采集函数 0基础学习
  • 沈阳车库门厂家,沈阳卷帘门工厂,沈阳防盗门生产厂家,沈阳悬浮门厂家排行,沈阳防盗门生产厂家排行,4S店智能车库提升门品牌十大推荐榜-沈阳鼎盛和门业
  • TGV检测中,投影式背光源选择的重要性
  • 实用指南:【装配式建筑学习感想】
  • 户外落地式广告机嘉兴今日报价厂家直销
  • 【Linux】Linux进程间通信:命名管道(FIFO)的模拟实现重要知识点梳理 - 实践