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

做推广效果哪个网站好房地产集团网站建设方案

做推广效果哪个网站好,房地产集团网站建设方案,有口皆碑的域名备案加急,平面网页设计前言#xff1a;开始之前先感谢一位大佬#xff0c;清风~徐~来-CSDN博客#xff0c;由于是时间久远#xff0c;博主指针的系列忘的差不多了#xff0c;所以有些部分借鉴了该播主的#xff0c;有些地方如果解释的不到位#xff0c;请翻看这位大佬的#xff0c;感谢大家开始之前先感谢一位大佬清风~徐~来-CSDN博客由于是时间久远博主指针的系列忘的差不多了所以有些部分借鉴了该播主的有些地方如果解释的不到位请翻看这位大佬的感谢大家 目录 一、指针运算 1.1指针-整数 1.2.指针-指针 1.3.指针的关系运算 二、野指针 一.野指针成因 1.指针未初始化 2.指针越界访问 3.指针指向的空间释放 三、规避野指针 1.小心指针越界 2.避免返回局部变量的地址 3.指针变量不再使用是置为NULL使用时检查其有效性 assert断言 四、指针与数组的关系 1.数组名 2.使用指针访问数组 五、字符指针 1.字符指针隐藏秘密 2.常量字符串 《剑指offer》笔试题 六、二级指针 七、指针数组 用指针数组模拟二维数组 结尾祝福语 一、指针运算 1.1指针-整数 指针是一个存放地址的变量这些我们都知道但是对于一个指针来说他的运算是怎么样的我们可以看看。我们都知道数组在内存中是连续存放的只要知道首地址我们就可以知道后面几个元素的地址。 #includestdio.h int main() {int arr[10] { 1,2,3,4,5,6,7,8,9,10 };int* p arr[0];int i 0;int sz sizeof(arr) / sizeof(arr[0]);for (i 0; i sz; i){printf(%d, *(p i));}return 0; } 我们观察发现 p存放的是arr[0]的地址p1跳过4个字节也就是1个整形所以p1指向整形元素arr[1]  p一次访问4个字节也就是一个整形得到arr[0]  同理*(p1)得到arr[1]按照指针的方法就可以打印数组所有的元素  数组名这里的数组名表示整个数组取出的是整个数组的地址整个数组的地址和数组首元素的地址虽然数值一样但还是有区别的  除此之外任何地方使用数组名数组名都表示首元素的地址。   1.2.指针-指针 大指针 - 小指针得到的是指针之间元素的个数仅限于它们是同一块空间 还有小指针 - 大指针得到的就是负数 #include stdio.h //指针 - 指针 int main() {int arr[10] { 1,2,3,4,5,6,7,8,9,10 };int* p1 arr[0];int* p2 arr[6];printf(%d\n, p1 - p2);//-6printf(%d\n, p2 - p1);//6return 0; }数组再内存中是连续存放的且是由低地址向高地址存放的。 1.3.指针的关系运算 指针还能够比较大小指针本质是地址地址以16进制显现出来的所以本质就是比较两个数的大小 while (p arr sz) //指针的大小比较 {printf(%d , *p);//打印数组所有的元素p;} 这还有一个需要注意的点是 二、野指针 野指针就是指向的位置是不可知的危险的未知的没有明确限制的是非常危险的 一.野指针成因 1.指针未初始化 //1.指针未初始化 #include stdio.h int main() {int*p//局部指针变量未初始化没有明确的指向默认值为随机值 *p20//非法访问了p成了野指针 //随机将p指向的对象改变是非常危险的。return 0; }2.指针越界访问 //2.指针越界访问 #include stdio.h int main() {int arr[10] { 0 };int* p arr[0];int i 0;for (i 0; i 11; i){ //当指针的指向的范围超出了arr的范围这就是越界了也算非法访问 //我们没有权利访问和修改超出的空间*(p)i;}return 0; }3.指针指向的空间释放 //3.返回局部变量的地址生命周期结束后使用 int* test() {int a 10;return a; } int main() {int* p test(); /*p要存a的地址函数返回的时候已经把a还给操作系统了p没有权限访问这块空间所以p是野指针 但是内存里的这块空间还在只是不属于当前程序没有使用的权限*/printf(%d\n, *p);//通过非法的地址如果这块空间没有被使用覆盖还能找到10但是不属于我们。return 0; }三、规避野指针 如果知道这块指针指向的哪里就直接将这块地址赋值给指针如果不知道指针只想哪里就赋值给NULL NULL是C语言当中定义的一个标识符常量值是00也是地址这个地址是无法使用的读写该地址会报错 #includestdio.h int main() { int num10; int*p1num; int*p2NULL; return 0; } 1.小心指针越界 ⼀个程序向内存申请了哪些空间通过指针也就只能访问哪些空间不能超出范围访问超出了就是越界访问。导致野指针。 2.避免返回局部变量的地址 如造成野指针的第3个例子不要返回局部变量的地址 3.指针变量不再使用是置为NULL使用时检查其有效性 当一个指针变量指向一块区域时我们可以通过指针访问这块区域但是我们如果后期不再使用时我们置为NULL这样就不用害怕成野指针了为约定俗成的⼀个规则就是只要是NULL指针就不去访问同时使用前要判断指针是不是NULL我们可以把野指针想象成野狗野狗放任不管是非常危险的所以我们可以找⼀棵树把野狗拴起来就相对安全了给指针变量及时赋值为NULL其实就类似把野狗栓起来就是把野指针暂时管理起来。不过野狗即使拴起来我们也要绕着走不能去挑逗野狗有点危险对于指针也是在使用之前我们也要判断是否为NULL看看是不是被拴起来起来的野狗如果是不能直接使用如果不是我们再去使用。 #includestdio.h int main() {int arr[10] { 1,2,3,4,5,6,7,8,9,10 };int* p arr[0];int i 0;for (i 0; i 10; i){*(p) i;}//此时p已经越界了可以把p置为NULL p NULL;//下次使⽤的时候判断p不为NULL的时候再使⽤ //...p arr[0];//重新让p获得地址 if (p ! NULL) //判断 {//...}return 0; }assert断言 assert.h头文件定义了宏assert用于在运行程序时判断程序是否符合条件如果不符合就终止运行直接报错。这个宏常常被称为“断言”     assert(p!NULL 验证变量 p 是否等于 NULL 。如果确实不等于 NULL 程序继续运行否则就会终止运行并且给出报错信息提示 四、指针与数组的关系 1.数组名 大多数人认为数组名只不过是一个代号罢了没有什么实际的意义没什么大用如果你怎么想那就大错特错了当初祖师爷在设计的时候将数组名设计了一个特殊的角色---------数组的首地址  #include stdio.h int main() {int arr[10] { 1,2,3,4,5,6,7,8,9,10 };printf(arr[0] %p\n, arr[0]);printf(arr %p\n, arr);return 0; }运行可以发现两个的地址是完全一样的所以数组名就是数组的首地址 我们再来看一段代码看一下arr的大小 #include stdio.h int main() {int arr[10] { 1,2,3,4,5,6,7,8,9,10 };printf(%d\n, sizeof(arr));return 0; } 这不紧让我们引发了思考:我们微微皱眉arr既然是元素的首地址应该是指针变量呀返回的是应该是4/8呀为什么会返回40哪 这是因为 arr是元素的首地址是对的但是有两个意外 sizeof数组名表示sizeof函数如果后面的参数是数组名表示的是整个数组取出来的是整个数组计算时算出来的是整个数组的字节数 数组名这里的数组名表示整个数组取出的是整个数组的地址整个数组的地址和数组首元素的地址虽然数值一样但还是有区别的 除此之外任何地方使用数组名数组名都表示首元素的地址。 再度思考那么数组的地址数组名与数组首元素的地址这三种又存在什么关系呢以下的代码将使你清晰理解这三者的联系 分析代码 #include stdio.h int main() {int arr[10] { 1,2,3,4,5,6,7,8,9,10 };printf(arr[0] %p\n, arr[0]);printf(arr[0]1 %p\n, arr[0] 1);printf(arr %p\n, arr);printf(arr1 %p\n, arr 1);printf(arr %p\n, arr);printf(arr1 %p\n, arr 1);return 0; }arr[0]和arr[0]1相差4个字节arr和arr1相差4个字节是因为arr[0]和arr都是首元素的地址1就是跳过⼀个元素也就是4个字节而每个字节都有对应的地址且地址相差1所以它们的地址就相差4。  arr和arr1相差40个字节这就是因为arr是数组的地址1操作是跳过整个数组就是40个字节地址相差0x26到这里大家应该搞清楚数组名的意义了吧。 2.使用指针访问数组 有了前面知识的支持再结合数组的特点我们就可以很方便的使用指针访问数组元素了如下代码 #include stdio.h int main() {int arr[10] { 1,2,3,4,5,6,7,8,9,10 };int i 0; int*parr; for(i0;return 0; }将*(pi)换成p[i]也是能够正常打印的所以本质上p[i]是等价于*(pi)。 同理arr[i]应该等价于*(arri)数组元素的访问在编译器处理的时候也是转换成首元素的地址偏移量求出元素的地址然后解引用来访问的。 还可以这么写*iarr以及这么写i[arr]是不是很奇妙啊了解一下就行了不推荐这么写。 思考为什么可以使用指针来访问数组呢总结 数组在内存是一块连续的空间存放的是相同类型的元素。  指针变量是一个变量是存放地址的变量数组和指针不是一回事但是可以利用指针来访问数组指针进行不断地1解引用可以很方便地遍历数组取出数组的内容。 我们发现在函数内部是没有正确获得数组的元素个数这又是为什么呢你也许会想指针怎么这么…此处省略一万字要尝试先接受它以后学习多了自然都解释地清了。 这就要学习数组传参的本质了上个小节我们学习了数组名是数组首元素的地址那么在数组传参的时候传递的是数组名也就是说本质上数组传参传递的是数组首元素的地址。所以函数形参的部分理论上应该使用指针变量来接收首元素的地址。那么在函数内部我们写sizeof(arr) 计算的是⼀个地址的大小单位字节而不是数组的大小单位字节。正是因为函数的参数部分是本质是指针所以在函数内部是没办法求的数组元素个数的。那形参为什么可以写成数组的形式呢这是因为C语言考虑到了学者的感受在学习数组的时候如果一来就传地址形参用指针变量来接收学者会非常地疑惑的。所以说C语言并不是这么冷若冰霜的。 总结⼀维数组传参形参的部分可以写成数组的形式也可以写成指针的形式。 五、字符指针 1.字符指针隐藏秘密 在指针的类型中我们知道有⼀种指针类型为字符指针 char* 存放的是字符的地址比如 #includestdio.h int main() {char ch w;char* pc ch;*pc w;return 0; } 还有一种 #includestdio.h int main() {const char* pstr hello bit.;//这里是把一个字符串放到pstr指针变量里了吗?printf(%s\n, pstr);return 0; } 代码 const char* pstr “hello bit.”;特别容易让同学以为是把字符串 hello bit 放到字符指针 pstr 里了但是不妨考虑一下指针存放的是地址怎么可能会存放字符串呢 其实本质是把常量字符串 hello bit. 首字符h的地址放到了指针变量pstr中。 2.常量字符串 常量字符串字面意思就是该字符串不能被修改接下来看一个代码 #includestdio.h int main() {char arr[] abcdef;char* p1 arr;*p1 b;printf(%s\n, arr);char* p2 abcdef;*p2 b;printf(%s\n, p2);return 0; }可以发现指针p1指向的空间可以修改而修改指针p2指向的空间则报错写入访问权限冲突。这是因为p2是常量字符串它还有更重要的特点接下来带我慢慢为你分析一二请看以下的笔试题。 《剑指offer》笔试题 《剑指offer》中收录了⼀道和字符串相关的笔试题我们⼀起来学习⼀下 #include stdio.h int main() {char str1[] hello bit.;char str2[] hello bit.;const char* str3 hello bit.;const char* str4 hello bit.;if (str1 str2)printf(str1 and str2 are same\n);elseprintf(str1 and str2 are not same\n);if (str3 str4)printf(str3 and str4 are same\n);elseprintf(str3 and str4 are not same\n);return 0; }这个题的答案是不是很意外str1和str2是两个字符数组储存的字符为hello world,是两个不同的空间str1和str2表示的是首地址由于是两个不同的空间所以str1和str2不相等。 str3和str4是被const修饰的字符指针都是指向“hello world”字符串的首地址的所以str3和str4是相等的 总结 str1和str2是两个数组数组的操作方式是将右边常量字符串的内容拷贝进来所以他们是两个空间只是内容相同所以str1 ! str2。 而str3和str4是两个指针 编译器在处理的时候会将相同的常量字符串做成同一个地址所以str3和str指向的是同一个常量字符串所以str3 str4。 六、二级指针 问题我们知道指针是存放元素地址的变量但是指针的地址我们可以存放吗 可以的指针的地址可以用另一个不同的指针变量来存放我们一般将这样的指针叫做二级指针 int a 10;int* p a;int** ppa p;int* l 0;*p 20;printf(%d\n, a);l *ppa;printf(%p\n, l);printf(%p\n, p);**ppa 30;printf(%d\n, a);return 0; 运行发现二级指针往往需要进行两层解引用我们用一层解引用发现一级解引用二级指针的结果和指针变量p所在的地址是相同的所以表明了二级指针存放的是一级指针的地址 七、指针数组 思考一下指针数组是指针还是数组好好思考这个问题有助于跟后面的学习区分开仔细想想 整型数组是存放整形的数组字符数组是存放字符类型的数组。那么指针数组一定是存放指针的数组。指针数组的每一个元素都是用来存放地址的。指针数组的元素是地址而每一个地址都可以指向一块区域。 所以我们可以先来看一道题 用指针数组模拟二维数组 #includestdio.h int main() {int arr1[] { 1,2,3,4,5,6,7,8,9,10 };int arr2[] { 1,2,3,4,5,6,7,8,9,10 };int arr3[] { 1,2,3,4,5,6,7,8,9,10 };int* parr[] { arr1,arr2,arr3 };int i 0, j 0;for (i 0; i 3; i){for (j 0; j 10; j){printf(%d, parr[i][j]);}printf(\n);} } parr是数组名表示首元素的地址也就是数组的地址这就牵扯到了数组指针数组指针又是什么呢 ................................... ........................ ................... 结尾祝福语 风带来故事的种子时间使之发芽本章就到这里博主会尽快更新下一章感谢大家支持
http://www.hyszgw.com/news/124653/

相关文章:

  • 建立一个企业网站需要多少钱合肥建设网站哪家好
  • 网站制作定制18华为企业网站建设需求分析
  • 建什么网站比较好saas 做网站
  • 建设网站客户资源从渠道来网站备案费用
  • 音乐设计网站推荐做网站优化需要做哪些事项
  • 蔡甸建设局网站专业微网站开发
  • 网站右下角调用优酷视频广告代码微商管理系统
  • 现在还有用dw做网站网站更新升级
  • 静安建设网站网站qq访客抓取
  • 临沂做企业网站的公司网站建设加工
  • 男的做直播哪个网站好wordpress 数卡
  • 网站做视频网站保密和档案网站建设方案
  • 广州网站建设工作室招聘建设银行 网站 字体
  • 网站基础建设强化属地管理责任做网站软件j
  • 百度 如何 关键字 网站域名 关联做网站背景图片浪漫爱情
  • 摄影网站建设开题报告深圳市网站开发
  • 上海 .net网站建设广州总承包建筑集团有限公司
  • 网站站点地图用frontpage做网站
  • 长沙岳麓区网站建设可信网站认证 服务中心
  • 贵州手机网站建设万荣做网站
  • wordpress产品目录seo免费入门教程
  • 网站建设价钱是多少建网站html5
  • 网站设置怎么清除wordpress 动态主题下载
  • 电子商务网站建设与运营网站建设找单
  • 北海住房和城乡建设部网站艺术品拍卖网站源码php
  • 医院网站建设目的做网站和seo哪个好
  • 做外贸英语网站各大网站免费观看
  • app开发导入网站模板网站建设市场前景如何
  • dede网站如何做中英文版本长沙市互联网加网站
  • 国企网站开发企业管理软件属于系统软件吗