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

做婚礼网站的公司酉阳网站制作

做婚礼网站的公司,酉阳网站制作,义乌网一件代发,云阳做网站文章目录 一、void * 指针二、const关键字1.const修饰变量2.const修饰指针变量2. 1 const放在*的右边2. 2 const放在*的左边2. 3 总结 三、指针的运算3. 1指针的加减运算3. 2 指针 - 指针3. 3 指针的关系运算 四、野指针4. 1 什么叫野指针#xff1f;4. 1 野指针的成因4.1.1 指… 文章目录 一、void * 指针二、const关键字1.const修饰变量2.const修饰指针变量2. 1 const放在*的右边2. 2 const放在*的左边2. 3 总结 三、指针的运算3. 1指针的加减运算3. 2 指针 - 指针3. 3 指针的关系运算 四、野指针4. 1 什么叫野指针4. 1 野指针的成因4.1.1 指针未初始化4.1.2 指针越界访问4.1.3 指针所指向的那块空间释放 提示以下是本篇文章正文内容下面案例可供参考 一、void * 指针 在c与语言中指针的类型有很多 指针类型指向解引用char*指向字符的指针解引用访问1个字节short*指向短整型的指针解引用访问2个字节int*指向整型的指针解引用访问4个字节float*指向单精度浮点型的指针解引用访问4个字节 特例 但是除去上面常见的一些类型c语言中还有一个特别的指针类型叫做void * 指针类型。 void*特点1 void*指针也称无具体类型的指针代表这个指针是没有具体类型的。也就是它可以接收任意类型的指针。在下面图中我们可以看到用void*指针可以接收任意类型的指针。 在这里有的读者可以会很疑惑我知道这个数据是什么类型的直接用这个类型不就可以了为啥还要单独弄出来一个void*的指针类型。在这里这里每个类型的数据都是直接给出来的但是以后我们想要写一个函数函数接收的数据类型是不可知的我们总不能把所有数据类型都写在函数的参数中于是我们用void*指针进行接收所有类型的指针就可以这样既不会出错误也不会出现多参数的情况。 void*特点2 void*指针也存在一些小问题就是void\*指针不能进行指针的加减操作和解引用操作。这是因为void*指针是无具体类型的指针你要对它进行解引用或者指针的加减它访问不知道是几个字节。所以不能对void*类型的指针进行这些运算。 二、const关键字 在c语言中还有一个关键字叫constconst英文意思叫常数所以在c语言中const的作用就是给予变量常属性使得被const修饰的变量无法修改。 1.const修饰变量 在这里可以看到const修饰变量变量具有常属性此时变量不可以被修改而没有被const修饰的变量a此时可以被修改。b被const修饰b此时具有常属性b不可以被修改但是b可不是常量下面我们来验证一下。 定义数组我们只能用常量来定义数组的元素个数上图显而易见我们用const修饰变量bb并不是变成常量了它只是具有了常属性不能被修改所以被const修饰的变量我们也称常变量。 2.const修饰指针变量 在了解const修饰指针变量我们先了解一下为什么要修饰指针变量我直接修饰变量不就不能改变值了么听我细细道来 在这里我们虽然用const修饰变量bb不能被修改但是我们可以通过地址去修改它这就好比法律总是存在一些漏洞这就需要进行修改和矫正于是就需要const修饰指针变量。const修饰指针变量可以放在两个地方一个是放在*的左边一个是放在*的右边。 2. 1 const放在*的右边 int main() {int b 10;int a 20;int* const p b;*p 20;//p a; //errprintf(%d,b);return 0; }在这里运行代码后我们可以发现const放在*右边修饰的指针变量pconst修饰指针变量p此时存放在指变量p中的值不可改变但是指针变量p所指向的那块空间可以改变。 2. 2 const放在*的左边 int main() {int b 10;int a 20;int const* p b;*p 20; //errp a; printf(%d,b);return 0; }在这里运行代码可以看出来此时const放在*的左边const修饰的指针变量的指向此时通过指针变量p指向去修改b中的值是不可以的但是可以修改指针变量p中存放的地址。 2. 3 总结 const修饰指针变量的时候 const如果放在*的左边修饰的是指针指向的内容保证指针指向的内容不能通过指针来修改但是指针变量本身的内容是可以修改的。 const如果放在* 的右边修饰的是指针变量本身保证了指针变量的内容不能修改但是指针所指向的内容是可以通过指针进行修改的。 三、指针的运算 了解完指针概念之后我们接下来要熟悉指针在使用过程中是如何运算的指针的运算主要有三种指针的加减运算指针减去指针指针的关系运算。 3. 1指针的加减运算 指针的加减运算主要用于数组方面在数组中内存是连续存放的知道首元素的地址可以顺藤摸瓜的找到后面的元素。 定义一个整型数组 int arr[5] { 1,2,3,4,5 }; 数组在内存中存放如下 在代码中的运用 int main() {int arr[5] { 1,2,3,4,5 };//打印数组内的元素int* p arr[0];int i 0;for (i 0; i 5; i){printf(%d , *(pi));}return 0; }分析 在这里我们首先定义了一个数组arr里面存放5个元素然后我们取出首元素的地址放入p中此时循环打印我们通过解引用p可以访问首元素p1此时访问的是下一个元素的地址。对应i当i0的时候访问数组中的第一个元素以此类推当i4的时候访问的是数组的最后一个元素。 3. 2 指针 - 指针 指针减去指针得到的是两个指针之间元素的个数 通过指针减去指针的方式实现strlen函数 strlen是一个统计字符个数的函数它的结束条件是碰到\0停止得到的是\0之前的元素的个数 char str[] abcdef 数组在内存中存放如下 思路 在这里我们想要实现strlen的自我实现并且运用指针减去指针的原理 因为数组传参传进来的就是首元素的地址我们得先定义一个起始指针变量start用来存放首元素的地址然后我们让地址进行一步一步加1地址每次加一访问的都是下一个元素的地址我们只需要判断该元素是不是\0如果是的话就停止指针加减操作用结束的指针地址减去起始指针的地址就可以得到字符串的字符的个数了。 代码实现 int my_strlen(char* str) {char* start str;while (*str ! \0){str;}return str - start; } int main() {char str[] abcdef; int ret my_strlen(str); printf(%d, ret); return 0; }3. 3 指针的关系运算 上节内容我们讲解了有关于内存的知识在计算机中计算机将内存划分为一个一个的内存单元一个内存单元占一个字节每个内存单元都有它相应的地址。在内存中也存在高地址和低地址。在数组中曾经就对数组在内存中的存储进行测试过数组在内存中的存储是由低地址到高地址方向连续存储的。 定义一个数组 定义一个数组打开调试窗口中的内存窗口找到数组arr在内存中的存储这里我们可以发现每个整型数组元素占四个字节每个字节都有自己的内存地址。 利用指针的关系运算打印出整型数组中的全部元素 #include stdio.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]); while(parrsz) //指针的⼤⼩⽐较 {printf(%d , *p); p; }return 0; }分析 在上面代码中我们首先定义了一个数组arr存放1到10这10个整数然后我们取出数组首元素的地址因为数组在内存中是从低地址向高地址进行存放的如上面的代码调试内存窗口可以看出1的存放地址是最低的10的存放地址是最高的。取出完地址放入指针变量p中后我们让p与数组首元素地址加9进行相比等价于第十个元素的地址首元素地址小于最后一个元素的地址进入循环首先通过指针变量p所指向的那份空间打印首元素然后指针变量1再与最后一个元素的地址进行相比依次直到指针变量p的地址大于等于最后一个元素的地址时打印结束。 四、野指针 4. 1 什么叫野指针 野指针就是指针指向的位置是不可知的随机的不正确的没有明确限制的。 接下来我们用一张图来解释一下什么叫野指针 这是一条狗假如它有主人的那么他就指向了它的主人他的任何事情都由主人进行处理假如他没有主人那么他就是一条野狗野狗是没有指向的他会四处乱串所以他的位置也是不可知的同时他也是非常危险的他没有接收训话人一旦靠近它很可能就会被咬伤。在这里野狗就等同于野指针野指针指向位置是不可知的同时也是非常危险的在指针中出现野指针会导致代码严重的后果。 4. 1 野指针的成因 4.1.1 指针未初始化 #include stdio.h int main() { int *p;//局部变量指针未初始化默认为随机值*p 20;return 0; }分析 在这里指针定义并没有给指针进行初始化在定义变量中变量未进行初始化默认的是随机值指针变量同样如此指针变量未进行初始化指针变量存的就是随机地址此时通过指针变量去访问该地址中的值进行修改值是没有权限的。这个就好比你在某地订了个酒店你朋友想去找你但是他不知道哪个是你地址他就随机找一个地址就想直接闯进去这肯定不行的。在这里也是同样的道理指针未初始化给定的是随机地址随机地址就是没有没有规定指向的此时指针变量p就是野指针。 4.1.2 指针越界访问 #include stdio.h int main() {int arr[10] {0};int *p arr[0];int i 0;for(i0; i11; i){//当指针指向的范围超出数组arr的范围时p就是野指针*(p) i;}return 0; }分析 在这里我们定义了10个数组通过指针访问却越界访问到了第十一个地址空间此时当指针指向的范围超出数组的范围的时候指针变量p就是野指针。野指针的指向是随机的通过它访问的值是随机的他可能是任何一个值。 4.1.3 指针所指向的那块空间释放 #include stdio.h int* test() {int n 100;return n; } int main() {int*p test();printf(%d\n, *p);return 0; }分析 上述代码我们调用test函数test函数返回n的地址用指针变量p进行接收test函数调用完后n变量所开辟的空间就还给系统空间了此时我们在主函数通过指针变量p去访问那块空间是没有访问权限的所以此时代码是存在错误的。而指针变量p就是野指针。
http://www.hkea.cn/news/14404973/

相关文章:

  • 网站开发的实践报告安徽理工大学新校区建设网站
  • php 网站 模板为企业制定网络营销方案
  • 企业形象网站建设WordPress中文相册
  • 网站上传大马后怎么做php网站怎么做post订单
  • 怎样做机械租赁的网站网站建设的关键细节
  • 网站建设中 html南宁网站优化推广
  • 企业网站建设模板百度识图查另一半情头
  • 网站搭建学什么专业电商网站平台有哪些功能模块
  • 网站有哪些功能网站开发前端简历
  • asp自动获取网站快照 网站缩略图零基础网页制作培训
  • 北京做网站好的jsp网站建设项目实战总结
  • win10做网站运动网站源码
  • 邢台网站关键词优化北京网页设计师工资有多少
  • 网站做cdn需要注意什么免费的行情软件app网站
  • seo的培训网站哪里好爱做奈官方网站
  • 自己做网站有什么用上海抖音推广公司
  • 做网站郴州免费网站空间 asp.net
  • 怎样在手机上做自己的网站怎样做网络推广给我 你所有地方都上手
  • 丁香园做科室网站国外展柜网站
  • 网站工信部超链接怎么做中文域名注册网站
  • 网站建设推广唯心磁遁8wordpress 修改页面内容
  • 有趣的网站之家做一个公司的网站应做哪些准备工作内容
  • 平台网站建设多少钱中国建设工程招聘信息网站
  • ip做网站地址wordpress制作婚礼网页
  • 什么静态网站容易做外贸网站如何做推广是什么意思
  • 昭通网站seo优化网站技术有哪些
  • 弄个做网站公司微信号注册官网网页版
  • wordpress母公司seo学校培训班
  • 设计网站官网wordpress快速安装
  • 国外设计最漂亮的网站wordpress安装是什么