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

网站建设归工商局管还是工信局管网络推广价格

网站建设归工商局管还是工信局管,网络推广价格,长沙东易日盛装饰公司,常熟外贸网站建设目录 指针介绍与基本用法双重指针函数参数的指针传递最后 指针一般在C/C语言学习的后期接触,这样就导致指针给新手一种高深莫测、难以掌握的刻板印象。但实际上指针的使用其实很简单,并且还能够极大的提高程序的灵活性,帮助我们轻松实现复杂的…

目录

  • 指针介绍与基本用法
  • 双重指针
  • 函数参数的指针传递
  • 最后

指针一般在C/C++语言学习的后期接触,这样就导致指针给新手一种高深莫测、难以掌握的刻板印象。但实际上指针的使用其实很简单,并且还能够极大的提高程序的灵活性,帮助我们轻松实现复杂的功能。

指针介绍与基本用法

 指针是什么?和上一章将的变量一样,指针也是一种变量罢了。与普通变量不同的是,指针变量存储的内容是地址数据,像什么0xffee之类的十六进制数据,并且它也有自己的地址,可以通过取地址符号&进行取址。下面这个代码定义了一个空指针a并且输出a的地址:

#include<iostream>
#include <cstring>
using namespace std;int main(){
char* a = NULL; 
cout << &a <<endl; //输出0xe3c49ff878
return 0;
}

 指针也是一个变量,就像int类型里面存储整数,float存储小数一样,指针也有自己的使命:存储其他变量的地址。因此,不能给指针赋数字或者字符,指针内只能装载其它变量的地址数据。
 指针的语法为:type * ptr_name例如int * a;float *b等啊,前面的type表明了这个指针存储的地址值对应的变量的类型。int类型就只能存储int类型变量的地址,float类型就只能存储float类型变量的地址。

#include<iostream>
#include <cstring>
using namespace std;int main(){int a = 1;float b = 0.01;int * i_Ptr = &a;float * f_Ptr = &b;char* c_Ptr = &a ; //报错:"int *" 类型的值不能用于初始化 "char *" 类型的实体C/C++(144)
return 0;
}

 指针使用的精髓与最强大的地方在于取值符*,通过*实现了根据地址找到指针指向的变量。这个功能真的很振奋人心,是int,float等其他变量类型所没有的功能。看下面这个例子,*ptr = variable

#include<iostream>
#include <cstring>
using namespace std;int main(){int a = 1;float b = 0.01;int * i_Ptr = &a;float * f_Ptr = &b;//通过*,找到了对应地址的变量a,bcout << *i_Ptr <<endl;  //输出:1cout << *f_Ptr <<endl;  //输出 0.01//再通过地址来修改对应变量的值,此时*i_Ptr = a,*f_Ptr = b*i_Ptr = 2; *f_Ptr = 0.02;cout <<a <<endl; //输出2cout <<b<<endl; //输出0.02
return 0;
}

 为了进一步说明取值符*的作用,绘图一张如下:揭示了指针的指向变量的功能
在这里插入图片描述

双重指针

 上面这张图最后出现了一个指向指针的指针,我们也称这种指针叫双重指针(另外还有三重、四重等,学会了双重指针其余的都是一样的)。双指针即指针内存储的值(指向的变量的地址)是另一个指针的地址。例如上图的d,有d=&p,则d = p。
 双指针的作用在于,通过双指针(d)可以在函数中调用以及修改指针(p)指向的变量(通过
d = p这个方法可以修改指针p的值从而改变指向对象,以及d = *p =a,从而修改指针p指向的变量a的值)
下面这个是通过
d修改双重指针指向的指针(b)所指向的对象(a)的值,把a的值改成了10

 #include<iostream>
using namespace std;
void func1(float** d){**d = 10; //通过**d改变指针指向对象的值
}
int main(){float a = 1;float *b = &a;func1(&b); cout << a<<endl; //输出a=10,即通过**d = a实现修改指向指针的值return 0;
}

下面这个是通过*d修改双重指针指向的指针(b)所指向的对象(a),把指向的对象从a转成了b

#include<iostream>
using namespace std;
float c = 2;
void func1(float** d){*d = &c; //通过*d改变指针指向的对象
}
int main(){float a = 1;float *b = &a; //此时 b指向afunc1(&b);  //函数更改了b指向的对象cout << *b <<endl; //输出2,即通过*d = b,实现修改指向指针所指向的对象;return 0;
}

函数参数的指针传递

 指针的一个重要的应用就是函数参数的指针传递,即传入函数的参数不是变量本身而是变量的地址。如果传入的是变量那么这种传参方式叫值传递,编译器会拷贝一份参数值到函数内部。这样一来是无法修改对应的变量,因为只传入了值,没有对应地址;二来拷贝需要占用内存空间。
通过指针传递的方法,可以在不使用返回值的前提下(使用返回值的方法会产生数据拷贝增大函数内存开销),通过取值操作符*来直接改变变量的值。并且由于传入的是变量地址,并不会函数本身不会占用太多的内存空间。二者对比的测试函数如下:

#include<iostream>
using namespace std;
float c = 2;//值传递
void func1(float d){d = 10; //实际上只是函数内部创建了一个局部变量float d;
}
//指针传递
void func2(float* d){*d = 10; //通过*d改变指针指向的对象
}int main(){float a = 1;float *b = &a; //此时 b指向afunc1(a);cout << a <<endl; //输出 a = 1,并没有改变a的值。func2(&a);  //函数可以直接改变a的值cout << a <<endl; //输出10,即修改指向指针所指向的对象的值;return 0;
}

双重指针的作用也是类似,可以实现在函数中改变传入的指针变量,例如改变指向对象,改变内存分配等。上一节双重指针的两个实例可以仔细研读一下。这里给一个通过双重指针实现自定义内存分配的例子:

#include<iostream>
using namespace std;
float c = 2;//函数功能:为指针分配内存空间
void func1(float **d){*d = new float[2]; //*d相当于传入的指针a
}int main(){float *a = NULL;//定义了一个空指针cout <<a[1]<<endl; //越界访问,程序出错func1(&a); cout << a[1] <<endl; //输出一个随机值return 0;
}

最后

 最后想说一下,关于指针上面的内容只是基础,后续还有关于指针数组和数组指针的一些内容,我将会放在数组那一章再介绍。

http://www.dtcms.com/wzjs/401035.html

相关文章:

  • 小企业网站开发论文黄页88网站推广效果
  • 网站建设具体步骤应该怎么做谷歌广告投放教程
  • 怎么对企业进行网站建设企业qq和个人qq有什么区别
  • 将一个网站拉入黑名单怎么做2345网址大全浏览器
  • 东莞中小企业网站制作建立企业网站步骤
  • 江苏省住房和城乡建设委员会网站百度官方网站首页
  • 重庆网站建设招聘网络营销和网站推广的区别
  • 政府网站建设先进个人网上卖货的平台有哪些
  • 牛 网站建设广告seo是什么意思
  • 厦门外贸网页设计服务株洲百度seo
  • 企业网站如何做架构图百度导航下载2022最新版官网
  • 买东西网站建设北京网站优化校学费
  • 北京垡头网站建设公司网店代运营靠谱吗
  • 如何查询网站是否备案b2b网站平台有哪些
  • 有教做翻糖的网站吗百度站长工具抓取诊断
  • 专业返利网站建设肇庆seo排名
  • b2b网站大全 黄页大全网站维护的内容有哪些
  • 公司优化网站的案例如何宣传自己的网站
  • 赤壁市药监局网站建设方案广东省最新新闻
  • 宁波高端网站设计价格永久免费用的在线客服系统
  • wordpress收费主题论坛深圳防疫措施优化
  • nas可以做网站今日实时热点新闻事件
  • 莱芜吧百度贴吧杭州百度优化
  • html5 手机网站开发教程网站内部seo优化包括
  • 淘宝美工网站怎么做公司网站费用
  • 牛b叉网站建设微博搜索引擎优化
  • 上海建网站计划百度总部
  • 南通网站建设空间站长之家的作用
  • 网站搭建软件推广活动策划方案范文
  • 设计网站公司的账务处理排名优化课程