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

北辰网站建设公司太原网站制作网络营销买什么好

北辰网站建设公司太原网站制作,网络营销买什么好,全国建筑企业查询平台,做房地产公司网站的费用一.指针与数组理解 我们都知道定义一个数组然后对其进行各种想要的操作,但是你真的能够区分那些是对数组的操作,那些是通过指针实现的吗? 例如;arr[1]10;这个是纯粹对数组操作实现的吗? 答案肯定不是,实际上我们定义…

一.指针与数组理解

 我们都知道定义一个数组然后对其进行各种想要的操作,但是你真的能够区分那些是对数组的操作,那些是通过指针实现的吗?

例如;arr[1]=10;这个是纯粹对数组操作实现的吗?

答案肯定不是,实际上我们定义一个数组之后只能做两件事:

1.确定数组的大小

2.获得一个指向该数组下标为0的元素指针

其他的操作本质上都是通过指针来实现的

为什么我要将这个呢?因为如果你能够理解这个,那么你就会明确的知道下面这个结论:

任何一个数组下标运算都等同于一个对应的指针运算

讲到这里,我们有必要重新讲解下对数组名的理解:

数组名就是数组⾸元素(第⼀个元素)的地址是对的,但是有两个例外:
1.sizeof(数组名),sizeof中单独放数组名,这⾥的数组名表⽰整个数组,计算的是整个数组的⼤⼩,
单位是字节
2.&数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址(整个数组的地址和数组⾸元素的地址是有区别的)
除此之外,任何地⽅使⽤数组名,数组名都表⽰⾸元素的地址。
关于指针的常见错误如下:
假如我们现在要定义两个指针指向对应的位置,我们的代码可能如下:
int* fast=NULL, slow=NULL;

但是你会发现在使用时,fast是指针,而slow却只是一个int型整数,原因就在于这里定义你写错了,正确的如下:

int* fast=NULL, *slow=NULL//注意slow前面加*

指针常见错误二:

如果两个指针fast 和 slow不指向同一个数组中(同一个连续的空间),是不能够进行相减操作的

给大家看一个案例,大家可以找找有几处错误:
#include <stdio.h>
#include <string.h>
int main()
{char arr1 = "hello";char arr2 = "world";char* pc = malloc(strlen(arr1) + strlen(arr2));//操作//……//结束return 0;
}

下面看我说的对不对:

1.用到malloc一定要检查空间大小,如果接下来我要进行strcat或者strcpy等操作,你确定开辟的空间够用吗?‘\0'我放在哪呢?所以,第一个问题就是malloc开辟空间不够大,我们应该开辟:

char* pc = malloc(strlen(arr1) + strlen(arr2)+1);

2.一个动态开辟的内存,你确定一定开辟成功?所以我们开辟后一定要检查:

char* pc = malloc(strlen(arr1) + strlen(arr2)+1);
if (pc == NULL)
{return -1;
}

3.指针有没有问题呢?你如果用完了指针,你是不是要归还给系统呢?

//结束
free(pc);
pc = NULL;

因此,正确代码如下:

#include <stdio.h>
#include <string.h>
int main()
{char arr1 = "hello";char arr2 = "world";char* pc = malloc(strlen(arr1) + strlen(arr2)+1);if (pc == NULL){return -1;}//操作//……//结束free(pc);pc = NULL;return 0;
}

关于指针还有一个易错点:
复制指针并不会复制指针所指向的数据
下面我们来深入理解下这句话:
假如现在我定义一个数组:int arr[3]={1,2,3};
再定义一个指针:int  p1=arr;
代码如下:
int arr[3]={1,2,3};
int* p1=arr

如果现在我们在:

int arr[3]={1,2,3};
int* p1=arr;
int* p2=p1;

现在是不是p1和p2都指向数组首元素了,如果我再:

int arr[3]={1,2,3};
int* p1=arr;
int* p2=p1;
p2[1]=5;

此时我想问p1[1]=?是不是也是5,没错,这就表明,新开辟p2指针是没有复制数据的,而是直接和p1指向同一块空间,明白这个有利于我们加深对指针底层理解!

指针和数组可以说是C语言重点了,希望大家能够对它们彻底学透。

二.边界计算和不对称边界

#include <stdio.h>
int main()
{int i = 0;int arr[] = { 1,2,3,4,5,6,7,8,9,10 };for (i; i <= 12; i++){arr[i] = 0;printf("hello world\n");}return 0;
}

看这个代码,结果大家都知道,就是会陷入死循环,现在我为什么要提出这个简单问题呢?假如你写的i<=12改成i<=10,如果编译器检查不严格,也可能代码陷入死循环的状态,接下来我们就慢慢来告诉大家如何能够避免这种错误代码(即循环次数问题)。

现在假如我有100米长的围栏需要每10米立一根栏杆,请问我要买几根?

对于这个问题,大家肯定会不假思索的答出:11根

现在我们回到元素上,请问:16<=x<=37,满足条件的整数有多少?是20?21?还是22?

我想如果你对此不熟悉的话,可能需要一番思索,然后才会回答:22

现在我们有这样一个方法来快速的判断元素个数:

如果我们将16<=x<=37转换为;16<=x<38,这个你会发现:38-16=22,即为结果

这个对于编程有啥关系呢?你可能会问


首先这种不对称关系被称为:不对称边界,在数组中,该边界中的上界(大的边界)即为元素个数,这样可以非常简洁的表示而不会出错。

对比下面代码:

#include <stdio.h>
int main()
{int arr[10] = { 0 };for (int i = 0; i <= 9; i++){arr[i] = i;}return 0;
}
#include <stdio.h>
int main()
{int arr[10] = { 0 };for (int i = 0; i <10; i++){arr[i] = i;}return 0;
}

将i<=9改成i<10,这样看起来可能不美观,但是可以非常有效帮助到你,如果你对此还感兴趣,可以去了解缓冲区知识,那里运用不对称边界又是美妙的体会。

这一部分主要讲述不对称边界书写问题,希望对大家有帮助。
本文章参考《C陷阱与缺陷》,欢迎大家自己阅读,体会里面的奇妙,最后感谢大家的支持,希望大家不断完善自己缺漏,弥补不足!
http://www.hengruixuexiao.com/news/29277.html

相关文章:

  • 做游戏网站需要注意的问题网站建设情况
  • 怎么改wordpress的html5温州网站优化推广方案
  • 做网站根据内容生成pdf小红书seo排名帝搜软件
  • 专注武汉手机网站建设怎么写网站
  • 东莞网站建设业务的公司中国国家人事人才培训网
  • 武汉网站建设企业seo课程培训班
  • 合肥专业做公司网站网站播放视频速度优化
  • 如何自己做软件网站制作免费个人网站
  • wordpress首显示全文页南昌seo实用技巧
  • ppt 做的最好的网站seo网站关键词排名快速
  • 浙江省建筑信息平台seo顾问能赚钱吗
  • 手机网站在线咨询代码站长工具在线免费
  • 平面设计素材网址福州seo排名公司
  • 淮南市城乡建设局网站口碑营销理论
  • 专业做生鲜的网站国家卫健委:不再发布每日疫情信息
  • 如何把国外的网站在国内做镜像营销推广工作内容
  • 软件公司网站素材腾讯云建站
  • 培训网网站源码宁波网络营销公司有哪些
  • 建设网站视频素材网站新站整站排名
  • 网站优化具体做哪些事情百度pc版网页
  • 汽车网站建设背景专业关键词排名优化软件
  • wordpress页面缓存seo排名影响因素主要有
  • 平板电脑做网站吗seo搜索引擎优化公司
  • 建站公司没前端沈阳seo优化排名公司
  • WordPress金融网站网站建设需要啥
  • 如何用ppt形式做网站宁波抖音seo搜索优化软件
  • 罗定市建设局网站ip域名查询
  • 围场网站建设网站媒体推广
  • 新媒体营销h5制作网站做网站哪家公司比较好而且不贵
  • 天河建设网站哪个好天津seo实战培训