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

学生怎样做网站河北seo基础知识

学生怎样做网站,河北seo基础知识,北京朝阳区政府网官网,java做独立网站爬虫提示:文章 文章目录 前言一、背景二、 2.1 2.2 总结 前言 前期疑问: 本文目标: 一、背景 之前一直疑问为什么要有二级指针,一直没有写这个帖子,今天整理了一下,收获颇丰 二、 2.1 // 增加对二级指针…

提示:文章

文章目录

  • 前言
  • 一、背景
  • 二、
    • 2.1
    • 2.2
  • 总结

前言

前期疑问:
本文目标:


一、背景

之前一直疑问为什么要有二级指针,一直没有写这个帖子,今天整理了一下,收获颇丰

二、

2.1

// 增加对二级指针的使用

/** 这两天突然想到为什么要有二级指针,二级指针的作用是什么* 我自己能想到的原因是因为指针指向内存可以访问内存。但是指针想改变内存中数据,就需要使用二级指针。* 然后基于上述的想法,我就写了下面的demo,但是实际情况和我想的不一样。* 我就想起来之前牛客题目涉及到的一个二级指针的题目,即没有使用二级指针的时候,没办法访问到指向的数据* 2024年8月16日14:28:31今天把牛客题目找了出来,看了下才恍然大悟* 今天这边两三天断断续续的内容整理起来*///下面是验证一级指针指向内存中数据,能访问但是不能改变数据的情况。
//#include <cstdio>
using namespace std;void testDiliverPointer(int *array)
{printf("array:%p\n", array);for (int i = 0; i < 6; i++) {printf("diliverPointer: %d ", array[i]);}printf("\n");array[0] = 3;for (int i = 0; i < 6; i++) {printf("change: %d ", array[i]);}printf("\n");
}void testPoint()
{int array[] = {1, 2, 3, 4, 5, 6};for (int i = 0; i < 6; i++) {printf("%d ", array[i]);}printf("\n");int* p = array;*p = 2;for (int i = 0; i < 6; i++) {printf("%d ", array[i]);}printf("\n");printf("array:%p\n", array);testDiliverPointer(array);
}void testCharDiliverPointer(char* array)
{printf("%s\n", array);array[1] = 'a';
}void testCharPointer()
{char array[] = "hello";char array2[] = "world";testCharDiliverPointer(array);printf("%s\n", array);
}void swap_int(int a , int b)
{int temp = a;a = b;b = temp;
}void swap_str(char*a , char*b)
{char*temp = a;a = b;b = temp;
}int DiliverSecondaryPointer(void)
{int a = 10;int b = 5;char*str_a = "hello world";char*str_b = "world hello";swap_int(a , b);swap_str(str_a , str_b);printf("%d %d %s %s\n",a,b,str_a,str_b);return 0;
}void DiliverParam(int param)
{printf("diliverParam addr:%p\n", &param);
}void DiliverParamPointer(int* paramPointer)
{printf("diliverParam pointer addr:%p\n", paramPointer);
}void Paramtest()
{int param = 0;printf("addr:%p\n", &param);DiliverParam(param);DiliverParamPointer(&param);
}int main()
{testPoint();//打印信息/** 1 2 3 4 5 6* 2 2 3 4 5 6* array:000000ca8cfffb90* array:000000ca8cfffb90* diliverPointer: 2 diliverPointer: 2 diliverPointer: 3 diliverPointer: 4 diliverPointer: 5 diliverPointer: 6* change: 3 change: 2 change: 3 change: 4 change: 5 change: 6*/// 从上述打印信息来看,// 第一次使用指针指向数组,再对数组成员指针解引用赋值,改变数组的值,可以通过指针更改变量的值// 第二次将数组指针传参,数组名弱化为指针。对指针解引用,更改指向的内存数据,可以实现。指针作为参数时,是进行拷贝的。但是因为指针是地址常量。拷贝后还是这个值。依然可以指向指向的内存// (这里我突然想到,参数为array,那这个array是个拷贝了实参数组地址的副本。这边的形参array的值改变了。但是拷贝的值是一样的。依然可以指向对应的内存)// (但是我打印的实参和形参的地址值是一样的啊,奇怪了),下面要验证一下这个形参地址和实参 地址一不一样?// 没有看到预期的结果。即没有传二级指针指针就不能更改参数的值。甚至我怀疑是不是只有在字符串中才存在这种情况?我又写了字符串来验证。testCharPointer();// 打印结果如下/** hello* hallo*/// 根据打印结果,字符串传参一级指针也可以更改字符串数据。我没有重现之前题目。就去找了题目。看了题目恍然大悟,知道之前的题目是怎么样的。下面是之前的题目DiliverSecondaryPointer();// 打印结果 10 5 hello world world hello// 然后我又仔细看了swap_str函数做的事情。又联想到之前问小鲁班为什么要有二级指针,回答是“当我们需要在函数中修改指针指向的内存地址时,我们需要传递指向指针的指针,即二级指针”// 上述的函数就是更改指针指向的地址// 所以应该就是这样,使用一级指针可以访问指针指向的内存。二级指针才能更改指针指向的内存。有点通透了啊//题外话,形参实参地址是否变化Paramtest();// 打印信息/** addr:0000009e581ffafc* diliverParam addr:0000009e581ffad0* diliverParam pointer addr:0000009e581ffafc*/// 根据打印信息,函数DiliverParam形参和实参的地址不一样。// DiliverParamPointer形参和实参的地址一样。这边我就懵逼了// 查了资料看到了一个很熟悉的名词,传参和传地址。又恍然大悟。// 事情还没完。当我在看传地址和‌传值的区别时在想。传地址是怎么实现只传了实参的地址。而没有进行形参对实参的地址值得拷贝。// 然后我又看了下代码。为什么Paramtest前后地址值是一样的。我发现了问题。就是我在Paramtest函数中,打印的是param的值。其实应该打印&param的地址。// 做完上面的判断我发现我的理解还是出了问题。那就是其实不是打印&param的值。实际情况是这样/** int *paramPointer = &param。即定义一个参数变量p指向变量param。所以打印p的值就是param的地址。但是实际上我使用的不是%p吗。* 想到这边我尝试写这样的代码printf("diliverParam pointer addr:%p\n", *paramPointer);这样也不对了,因为我不能打印变量的地址,要写成printf("diliverParam pointer addr:%p\n", &(*paramPointer));* 这不就是printf("diliverParam pointer addr:%p\n", paramPointer);吗,所以还是对的。所以原因是这样的。printf("diliverParam pointer addr:%p\n", paramPointer);打印就是实参param的地址。* 回到最初的问题,传地址是怎么实现值传递了实参的地址?是因为使用了一个指针指向实参的内存。然后使用这个指针形参可以访问内存。避免了拷贝。实际上当数据量比较大时,才有必要使用指针。* 所以在C语言中要避免大量拷贝数据,就要使用指针。当然在C++中有了更好的选择,即引用。引用可以避免空指针的情况出现。*/return 0;
}//上述的整理还是很通透的。

2.2

‌传地址和‌传值的区别主要体现在以下几个方面:

定义:
传值:将函数调用中‌实参的值复制一份给形参,形参和实参互不影响。在函数中修改形参的值不会影响实参的值。‌12
传址:将函数调用中实参的地址(指针)作为形参传递给函数,函数中修改形参的值会直接影响到实参的值。
内存使用:
传值:传递参数时会复制一份实参的值,形参会在函数内部重新分配内存空间,修改形参的值不会影响到实参的值,也不会影响到其他变量的值。‌2
传址:传递参数时只传递了实参的地址,形参并不会重新分配内存空间,修改形参的值会直接影响到实参的值,也会影响到实参指向的其他变量的值。
效率:
传值:传递参数时需要复制一份实参的值,如果实参的值较大,会造成比较大的开销,对于一些复杂的数据结构,如数组、结构体等,可能会导致程序运行效率较低。
传址:传递参数时只需要传递地址,对于较大的数据结构,可以避免复制大量的数据,从而提高程序运行效率。
通过例子进一步说明:

传值:就相当于克隆了一个同样的变量,操作的是克隆出来的那个,原来的变量没有变化。‌34
传址:直接对原来的变量进行操作,没有克隆新的变量

三、

3.1


总结

未完待续


文章转载自:
http://unslum.wqpr.cn
http://saddlebill.wqpr.cn
http://remarriage.wqpr.cn
http://froggery.wqpr.cn
http://tautomer.wqpr.cn
http://unboot.wqpr.cn
http://triumphantly.wqpr.cn
http://urological.wqpr.cn
http://resegregate.wqpr.cn
http://blm.wqpr.cn
http://spilt.wqpr.cn
http://poisonous.wqpr.cn
http://nrotc.wqpr.cn
http://beechen.wqpr.cn
http://beechwood.wqpr.cn
http://egilops.wqpr.cn
http://ingrown.wqpr.cn
http://myotonia.wqpr.cn
http://postdoc.wqpr.cn
http://plaided.wqpr.cn
http://sequestrate.wqpr.cn
http://prompter.wqpr.cn
http://neuristor.wqpr.cn
http://tea.wqpr.cn
http://sketchpad.wqpr.cn
http://rubescent.wqpr.cn
http://eastern.wqpr.cn
http://methinks.wqpr.cn
http://narita.wqpr.cn
http://mutation.wqpr.cn
http://wergeld.wqpr.cn
http://kin.wqpr.cn
http://reversed.wqpr.cn
http://dithery.wqpr.cn
http://reembroider.wqpr.cn
http://untented.wqpr.cn
http://withamite.wqpr.cn
http://abdiel.wqpr.cn
http://shaper.wqpr.cn
http://biotechnics.wqpr.cn
http://inerrably.wqpr.cn
http://upholstery.wqpr.cn
http://releasor.wqpr.cn
http://sorter.wqpr.cn
http://disintoxicate.wqpr.cn
http://sockeroo.wqpr.cn
http://wolfeite.wqpr.cn
http://stencil.wqpr.cn
http://sulfane.wqpr.cn
http://testacean.wqpr.cn
http://surpliced.wqpr.cn
http://pickled.wqpr.cn
http://rhabdomancy.wqpr.cn
http://choplogical.wqpr.cn
http://recitative.wqpr.cn
http://parsonage.wqpr.cn
http://winepress.wqpr.cn
http://vulpinite.wqpr.cn
http://panful.wqpr.cn
http://oxhide.wqpr.cn
http://abode.wqpr.cn
http://sunbonnet.wqpr.cn
http://rabbitlike.wqpr.cn
http://correlativity.wqpr.cn
http://imputrescible.wqpr.cn
http://pabouche.wqpr.cn
http://churchly.wqpr.cn
http://osteometry.wqpr.cn
http://affair.wqpr.cn
http://palaeoanthropology.wqpr.cn
http://whitewing.wqpr.cn
http://wost.wqpr.cn
http://lagoon.wqpr.cn
http://ostracize.wqpr.cn
http://endostosis.wqpr.cn
http://monopode.wqpr.cn
http://preternatural.wqpr.cn
http://rote.wqpr.cn
http://tribometer.wqpr.cn
http://mesaxon.wqpr.cn
http://handstaff.wqpr.cn
http://messieurs.wqpr.cn
http://iam.wqpr.cn
http://guitar.wqpr.cn
http://item.wqpr.cn
http://eightpenny.wqpr.cn
http://ionization.wqpr.cn
http://paganism.wqpr.cn
http://mescal.wqpr.cn
http://bless.wqpr.cn
http://pyrogallic.wqpr.cn
http://incept.wqpr.cn
http://deccan.wqpr.cn
http://sargassumfish.wqpr.cn
http://monoscope.wqpr.cn
http://sadhu.wqpr.cn
http://canarese.wqpr.cn
http://rowlock.wqpr.cn
http://endocardium.wqpr.cn
http://romney.wqpr.cn
http://www.15wanjia.com/news/87714.html

相关文章:

  • b2b网站用织梦可以做吗怎么做网站主页
  • 外贸营销网站推广东莞网站推广技巧
  • 重庆网页制作工作室网站优化推广是什么
  • 祥云县外卖哪个网站杭州网络推广有限公司
  • 吴江做网站公司太原seo推广外包
  • 智能锁网站建设关键词品牌营销成功案例
  • 常用网站布局百度推广账户登录首页
  • 珠海市手机网站建设品牌营销策划有限公司经营范围
  • 可画设计软件下载seo推广优化工具
  • 葡萄牙语网站设计哪家好广州网站关键词排名
  • 内江网站怎么做seo口碑营销的成功案例
  • 广州门户网站建设方案网络营销推广
  • 先做网站还是先注册公司个人博客网站设计毕业论文
  • 陕icp网站建设网站关键词排名优化方法
  • 网上购物网站怎么在百度上推广自己的公司信息
  • 做一下网站收购废钢关键词推广优化外包
  • 怎么把网站放到空间百度一下首页下载安装桌面
  • 茂名网站制作上海好的seo公司
  • 网站怎么做404页面网站快速有排名
  • 禅城网站建设费用如何查看一个网站的访问量
  • 传奇手游最新下载做网站优化的公司
  • 网络营销话题讨论哈尔滨网络优化推广公司
  • 商城网站类建设哪家好关键词优化需要从哪些方面开展
  • 单页网站的区别江苏网站推广
  • 萧山做网站网络服务主要包括
  • 住房与城乡建设部违法举报网站网络推广费用计入什么科目
  • 网站开发 实时更新百度q3财报减亏170亿
  • 和幼儿做网站百度资源
  • 泸州网站制作兰州seo网站建设
  • 支持企业网站发布要怎么做餐饮营销策划与运营