网站建设开发报价明细百度搜索引擎推广步骤

web/2025/10/2 1:06:45/文章来源:
网站建设开发报价明细,百度搜索引擎推广步骤,营销型网站开发 语言选择,做任务赚q币网站指针 为了后续一些安排打基础#xff0c;决定使用C/C作为算法主语言#xff0c;所以从这篇文章开始#xff0c;从指针开始总结 指针 - 指针进阶 - 字符串函数 - 自定义类型 - 动态内存管理 - 数据结构 还有C一些基础语法的回顾#xff08;基于算法…指针 为了后续一些安排打基础决定使用C/C作为算法主语言所以从这篇文章开始从指针开始总结 指针 - 指针进阶 - 字符串函数 - 自定义类型 - 动态内存管理 - 数据结构 还有C一些基础语法的回顾基于算法竞赛使用 文章目录 指针概念指针变量 指针和指针类型指针-整数解引用 野指针成因指针未初始化指针越界访问指针指向的空间释放 规避野指针 指针运算-整数指针-指针关系运算 指针和数组二级指针 概念 指针是内存中一个最小单元的编号也就是地址 平时口语中说的指针通常指的是指针变量是用来存放内存地址的变量 总的来说指针就是地址口语中说的指针通常指的是指针变量。 指针变量 我们可以通过取地址操作符取出变量的内存其实就是地址把地址可以存放到一个变量中这个变量就是指针变量 #include stdio.h int main() {int a 10; //在内存中开辟一块空间int *p a;//这里我们对变量a取出它的地址可以使用操作符。//a变量占用4个字节的空间这里是将a的4个字节的第一个字节的地址存放在p变量中p就是一个之指针变量。return 0; }指针和指针类型 char *pc NULL; int *pi NULL; short *ps NULL; long *pl NULL; float *pf NULL; double *pd NULL;指针±整数 #include stdio.h //演示实例 int main() {int n 10;char *pc (char*)n;int *pi n;printf(%p\n, n);printf(%p\n, pc);printf(%p\n, pc1);//打印指针 pc 向后移动一个单位1 字节后的内存地址使用 %p 格式说明符并换行printf(%p\n, pi);printf(%p\n, pi1);//打印指针 pi 向后移动一个单位4 字节后的内存地址使用 %p 格式说明符并换行。return 0; } //输出结果 00DDF7E8 00DDF7E8 00DDF7E9 00DDF7E8 00DDF7EC**总结**指针的类型决定了指针向前或者向后走一步有多大距离~ 解引用 在C语言中指针解引用操作使用*符号来访问指针所指向的内存位置的值。也就是说使用*操作符可以获取指针所指向的内存位置的值或者可以修改该内存位置的值。 #include stdio.h int main() {int n 0x11223344;char *pc (char *)n;int *pi n;*pc 0; //重点在调试的过程中观察内存的变化。*pi 0; //重点在调试的过程中观察内存的变化。return 0; }另外一个例子 #include stdio.hint main() {int num 10;int *ptr num;printf(Value of num: %d\n, num); // 输出Value of num: 10printf(Value of num using pointer: %d\n, *ptr); // 输出Value of num using pointer: 10*ptr 20; // 使用指针解引用操作修改指针所指向的内存位置的值printf(Updated value of num using pointer: %d\n, *ptr); // 输出Updated value of num using pointer: 20printf(Updated value of num: %d\n, num); // 输出Updated value of num: 20return 0; } //结果 Value of num: 10 Value of num using pointer: 10 Updated value of num using pointer: 20 Updated value of num: 20综上的例子我的理解就是指针的解引用操作就是可以修改那个被解引用对象或者变量的所在的内存的值 总结 指针的类型决定了对指针解引用的时候有多大的权限能操作几个字节。 比如 char* 的指针解引用就只能访问一个字节而 int* 的指针的解引用就能访问四个字节。 野指针 所谓的野指针就是指向无效内存地址的指针会导致不可预测的行为~ 成因 指针未初始化 #include stdio.h int main() { int *p;//局部变量指针未初始化默认为随机值*p 20;return 0; }这段代码在声明了一个指针变量 p 后没有将其初始化为有效的内存地址而是直接对其进行解引用操作将值 20 存储到目标地址中。 要修复这个问题应该在使用指针之前先为其分配内存。可以使用 malloc() 函数来动态分配内存后面会更新或者将指针指向一个已有的变量或数组。以下是修复后的示例代码 #include stdio.h int main() {int *p malloc(sizeof(int)); // 分配内存用于存储 int 类型变量*p 20; // 解引用指针并为其赋值// 使用指针的值printf(Value: %d\n, *p);// 释放内存free(p);return 0; }指针越界访问 #include stdio.h int main() {int arr[10] {0};int *p arr;int i 0;for(i0; i11; i){//当指针指向的范围超出数组arr的范围时p就是野指针*(p) i;}return 0; }指针指向的空间释放 后面在动态内存管理的博客中会再总结一次~ 一般这种指针被叫做悬空指针 当使用 free() 函数释放一个动态分配的内存块时该内存块被标记为可重新使用但指向该内存块的指针仍然保留着原来的地址。如果在释放内存之后继续使用该指针它就成为了一个指向已释放内存的野指针。 下面给个示例代码 #include stdio.h #include stdlib.hint main() {int *p;p malloc(sizeof(int));*p 10;free(p); // 释放了内存printf(Value: %d\n, *p); // 访问已释放内存的指针*p 20; // 修改已释放内存的指针return 0; }在上述示例中我们首先使用 malloc() 分配了一个整型的内存块并将其赋值为 10。然后我们用 free() 函数释放了该内存块使得指针 p 成为了一个指向已释放内存的悬空指针。 接下来我们尝试访问该悬空指针的值并打印这个操作属于未定义行为可能会输出错误结果、崩溃或其他不可预测的行为。 最后我们尝试修改悬空指针的值为 20同样也是未定义行为可能会导致程序异常终止或产生其他意外结果。 为了避免这种问题我们应该在释放内存后将指针设置为 NULL并在使用指针之前检测其是否为 NULL。 #include stdio.h #include stdlib.hint main() {int *p;p malloc(sizeof(int));*p 10;free(p);p NULL; // 将指针设置为 NULLif (p ! NULL) {printf(Value: %d\n, *p); // 避免访问已释放内存的指针}p malloc(sizeof(int)); // 重新分配内存*p 20; // 修改重新分配的内存的值free(p);return 0; }在修复后的示例中我们在释放内存后将指针 p 设置为 NULL。然后在使用指针之前我们先检查指针是否为 NULL以确保它指向有效的内存。我们还重新分配了内存并修改了相应的指针。 这个示例展示了正确处理指向已释放内存的指针的方式以避免悬空指针问题的发生。 规避野指针 指针初始化 小心指针越界 指针指向空间释放及时置NULL 避免返回局部变量的地址 指针使用之前检查有效性 指针运算 ±整数 #include stdio.hint main() {int arr[] {10, 20, 30, 40, 50};int *ptr arr; // 指向数组的第一个元素// 使用指针的加法运算printf(Elements of array using pointer arithmetic:\n);for (int i 0; i 5; i) {printf(%d , *ptr);ptr; // 指针向后移动一个 int 大小的位置}printf(\n);// 使用指针的减法运算ptr arr[4]; // 指向数组的最后一个元素printf(Elements of array (reverse order) using pointer arithmetic:\n);for (int i 0; i 5; i) {printf(%d , *ptr);ptr--; // 指针向前移动一个 int 大小的位置}printf(\n);return 0; } //输出结果 Elements of array using pointer arithmetic: 10 20 30 40 50 Elements of array (reverse order) using pointer arithmetic: 50 40 30 20 10指针-指针 当两个指针相减时其结果是两个指针之间的距离以指针指向的类型大小为单位。这个结果是一个整数类型。 指针-指针的操作通常用于比较两个指针之间的距离或者计算数组中连续元素之间的距离。 #include stdio.hint main() {int arr[] {10, 20, 30, 40, 50};int *ptr1 arr[1]; // 指向数组的第二个元素int *ptr2 arr[4]; // 指向数组的最后一个元素// 计算指针之间的距离int diff ptr2 - ptr1;printf(Distance between ptr1 and ptr2: %d\n, diff);return 0; } //输出结果 Distance between ptr1 and ptr2: 3注意 两个指针必须指向同一个数组或同一块内存才能进行指针-指针的操作。 如果两个指针指向不同的数组或者一个指针指向数组的开始而另一个指针指向数组的结束则结果是无效的。 同时还可以使用指针-指针操作来比较两个指针的相对位置 #include stdio.hint main() {int arr[] {10, 20, 30, 40, 50};int *ptr1 arr[1]; // 指向数组的第二个元素int *ptr2 arr[3]; // 指向数组的第四个元素if (ptr1 ptr2) {printf(ptr1 is before ptr2\n);} else if (ptr1 ptr2) {printf(ptr1 is after ptr2\n);} else {printf(ptr1 and ptr2 are equal\n);}return 0; }注意 仅当两个指针指向同一个数组或同一块内存时比较两个指针的相对位置才有意义。否则结果是未定义的。 关系运算 #include stdio.hint main() {int arr[] {10, 20, 30, 40, 50};int *ptr1 arr; // 指向数组的第一个元素int *ptr2 arr[2]; // 指向数组的第三个元素if (ptr1 ptr2) {printf(ptr1 is greater than ptr2\n);}if (ptr1 ptr2) {printf(ptr1 is less than ptr2\n);}if (ptr1 ptr2) {printf(ptr1 is greater than or equal to ptr2\n);}if (ptr1 ptr2) {printf(ptr1 is less than or equal to ptr2\n);}if (ptr1 ptr2) {printf(ptr1 is equal to ptr2\n);}if (ptr1 ! ptr2) {printf(ptr1 is not equal to ptr2\n);}return 0; }指针和数组 #include stdio.h int main() {int arr[10] {1,2,3,4,5,6,7,8,9,0};printf(%p\n, arr);printf(%p\n, arr[0]);return 0; } 00F3FBC8 00F3FBC8可见数组名和数组首元素的地址是一样的 int arr[10] {1,2,3,4,5,6,7,8,9,0}; int *p arr;//p存放的是数组首元素的地址既然可以把数组名当成地址存放到一个指针中我们使用指针来访问一个就成为可能。 例如 #include stdio.h int main() {int arr[10] {1,2,3,4,5,6,7,8,9,0};int *p arr;//p存放的是数组首元素的地址int sz sizeof(arr)/sizeof(arr[0]);for(i0; isz; i){printf(arr[%d] %p p%d %p\n, i, arr[i], i, pi);}return 0; } arr[0] 00AFF708 p0 00AFF708 arr[1] 00AFF70C p1 00AFF70C arr[2] 00AFF710 p2 00AFF710 arr[3] 00AFF714 p3 00AFF714 arr[4] 00AFF718 p4 00AFF718 arr[5] 00AFF71C p5 00AFF71C arr[6] 00AFF720 p6 00AFF720 arr[7] 00AFF724 p7 00AFF724 arr[8] 00AFF728 p8 00AFF728 arr[9] 00AFF72C p9 00AFF72C所以 pi 其实计算的是数组 arr 下标为i的地址。 那我们就可以直接通过指针来访问数组。 int main() {int arr[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };int *p arr; //指针存放数组首元素的地址int sz sizeof(arr) / sizeof(arr[0]);int i 0;for (i 0; isz; i){printf(%d , *(p i));}return 0; }二级指针 二级指针也称为指向指针的指针它是一种较为复杂的指针类型。通过使用二级指针我们可以操作指针的指针即通过一个指针间接引用另一个指针。 二级指针常用于需要在函数之间传递和修改指针的地址的情况它提供了更灵活的指针操作方式。 对于二级指针的运算有 *ppa 通过对ppa中的地址进行解引用这样找到的是 pa *ppa 其实访问的就是 pa int b 20; *ppa b;//等价于 pa b;**ppa 先通过 *ppa 找到pa,然后对 pa 进行解引用操作*pa那找到的是 a . **ppa 30; //等价于*pa 30; //等价于a 30;再看一下下面代码 #include stdio.h #include stdlib.hint main() {int val 42;int* ptr val; // 一级指针指向 val 的地址int** dptr ptr; // 二级指针指向 ptr 的地址printf(Value: %d\n, **dptr); // 通过二级指针访问 val 的值int* newVal (int*)malloc(sizeof(int)); // 动态分配内存*newVal 99; // 通过一级指针修改 newVal 的值*dptr newVal; // 通过二级指针修改 ptr 的值使其指向 newValprintf(Value: %d\n, **dptr); // 通过二级指针访问 newVal 的值free(*dptr); // 释放内存*dptr NULL; // 通过二级指针重置指针变量为 NULLreturn 0; }在上述示例中我们首先声明了一个整型变量 val然后声明了一个一级指针 ptr该指针指向 val 的地址。然后我们声明了一个二级指针 dptr该指针指向 ptr 的地址。 在打印 **dptr 时我们使用两次解引用操作符 *可以间接访问 val 的值。 接下来我们使用 malloc 函数动态分配了一个新的整型变量并通过一级指针 newVal 修改了它的值。然后我们通过二级指针 dptr 修改了一级指针 ptr 的指向使其指向新分配的内存。 最后我们使用 free 函数释放了动态分配的内存并将指针变量重置为 NULL。 至此指针的初阶总结到此结束接下来会持续感谢~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/85344.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dedecms 资源类网站wordpress发文章后显示两篇

描述 判断两个字符串是否由相同的字符组成 分析 方法一,排序法。对两个字符串进行排序,然后在比较。 方法二,空间换时间。ascII字符共256个,对字符串1出现的字符在对应的数组里加1,对字符串1出现的字符在对应的数组里减…

58同城烟台网站建设怎么下载文件

es创建映射和设置 一、什么是 Elasticsearch 映射?二、映射中的字段类型常见字段类型 (Common data types)对象和关联类型(Objects and relational types)结构化数据类型(Structured data types&#xff09…

网站设计流程是什么如何把网站做的和别人一样

Android之用 ExpandableListView使用解析(三级列表的实现) 下载地址如下:http://download.csdn.net/download/u011068702/9839848

胶南网站建设公司网站建设高级 上海

1、简介 1.1、概述 很多情况下,在一个软件系统中可以处理某个请求的对象不止一个。例如SCM系统中的采购单审批,主任、副董事长、董事长和董事会都可以处理采购单,他们可以构成一条处理采购单的链式结构。采购单沿着这条链进行传递&#xff…

网站建设优化工资高不下载app浏览器

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1. 运行sh脚本的2种方法: ./AAA。sh 或者 sh AAA.sh 。(其实后辍名不重要。是txt也是可以运行的。)…

湖南新备案的网站高明网站建设

目录 一、实验目的 二、实验概述 三、实验内容 四、问题描述 1.实验基本要求 2.实验亮点 3.实验说明 五、算法原理和实现 问题1-4算法 1. 选择排序 算法实验原理 核心伪代码 算法性能分析 数据测试 选择排序算法优化 2. 冒泡排序 算法实验原理 核心伪代码 算…

安康网站开发公司报价2022房地产行业现状及前景

http://poj.org/problem?id3125 这道题没什么突出的地方,是一道很水的题,可以用list,也可以用queue来解决。(用list解决的代码我就不写了)把它写上来,只是因为我在使用STL的时候犯了一个小错误&#xff0c…

阿里云php网站建设教程wordpress 内部错误

先说下优缺点 优点:与电脑无关,能播放主流编码格式视频。 缺点:只能播放本地视频,网络视频播放不了。 下面是具体操作和代码 1. 安装Vlc.DotNet.Forms 和 VideoLAN.LibVLC.Windows Vlc.DotNet.Forms 是播放库,Vid…

网站建设服务器搭建无水印logo在线制作免费

文章目录 🎉SSM整合流程一、两个容器整合✨ 1、先准备好数据库config.properties连接、mybatis-config.xml🎊 2、容器一:优先配置spring.xml文件🎊 3、容器二:配置springMVC.xml文件🎊 4、Tomcat整合spring…

邯郸网站制作多少钱音乐网站需求分析

Mysql查询用户留存/留存率语法计算某日的客户在第n日再次出现的概率--用户n日留存率。计算某日的客户在某个时间段内再次出现的概率--用户n日内留存率。计算某日新增的用户在第n日再次出现的概率--新用户n日留存率。计算某日新增的用户在某个时间段内再次出现的概率--新用户n日…

域名购买哪个网站注册网站后邮箱收到邮件

Windows Phone 7.1 “芒果” SDK Beta 今天早上发布,第一时间下载体验。功能果然激动人心。 下载地址: 离线ISO请点我, 在线安装请点我。转载于:https://www.cnblogs.com/finehappy/archive/2011/05/25/2056849.html

网站开发用什么语言好免费的查企业的网站

然后我们继续来看 这里有个lfw_home可以看到这个数据是,包含了人脸数据 然后我们继续看,在我们的顶你用户目录下,如果安装了,sklearn就会有这样一个目录, scikit_learn_data目录,这个里面可以看到 可以看到这个文件夹中有个 lfw_home文件夹是对.zip文件夹的解压,这个下载以后…

淘宝上做网站的生意怎么样济南网站建设飞鸟

转载本文请注明详细地址本文介绍了像素点相加减溢出的原因与解决方法 目录 原因: 解决方法: 原因: 这个问题一般是会出现在图像处理像素的加减中,出现的原因是因为图片的像素一般是八位即最大值是256,最小值是0&…

成品网站 智能建站网站流量推广

来源:深城物联在高速发展的现代社会,纷繁复杂的城市道路交织成奔腾不息的交通动脉。今年,全国政协委员、百度董事长兼首席执行官李彦宏在提案中关注“智能交通”“自动驾驶”。在新一代信息技术不断发展的背景下,汽车与城市道路的…

网站转小程序工具上海网站开发工程师招聘网

16春季福师《计算机应用基础》在线作业二福师《计算机应用基础》在线作业二一、单选题(共 40 道试题,共 80 分。)1. ( )都是系统软件。. OS 和MIS. WPS和UNIX. UNIX和Wor. OS和UNIX正确答案:2. 在幻灯片浏览视图中,下列( )操作不能实现。. 复…

平面设计官方网站如何建一个企业网站

1. 贪心算法: 理解:所谓“贪心”,即在每一步的求解中求得问题的最优解,成为当前局部问题的最优解。但与动态规划问题不同的地方在于,动态规划会根据整体最优解的情况与之前的解作比较,并选取整体最优解&…

网站改版 重新收录沈阳网吧什么时候恢复营业

什么是云原生 云原生的定义 aws: 云原生是在云计算环境中构建、部署和管理现代应用程序的软件方法。现代公司希望构建高度可伸缩、灵活和有弹性的应用程序,以便能够快速更新以满足客户需求。为此,他们使用了支持云基础设施上应用程序开发的现…

网站添加音乐降龙网络专业做网站

1 创作灵感 我们在阅读代码的时候,经常会看到zip函数,有的时候还和循环在一起用,今天举几个例子测试一下该函数的用法 2.应用举例 (1)定义了两个列表一个是num,一个是letter (2)使用zip可以把num列表和letter列表中…

局网站建设方案word在线电子印章制作

时间记录:2023/12/17 1.介绍 QT中进行对象之间事件的处理机制为信号、槽机制,即一个对象状态改变时发出信号,然后与此信号进行绑定的对应槽便会被触发,类似于c/c里面的回调函数机制 2.信号 在一定情况下被发射的事件&…

建设银行信用卡官网站首页网站开发所需能力

文章目录 前言一、Key模型二、Key/Value模型总结 前言 二叉搜索树的在现实世界的应用很广泛,比如Key模型,Key-Value模型就是常见的两种的模型 一、Key模型 K模型:K模型即只有key作为关键码,结构中只需要存储Key即可&#xff0c…