• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >编程问答 > C语言中,二级指针的用处,必要性和经常使用在的地方,求大神指导

C语言中,二级指针的用处,必要性和经常使用在的地方,求大神指导

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-07

佚名通过本文主要向大家介绍了c语言大神,如何成为c语言大神,c语言指针的用处,c语言中关于指针,c语言指针教学视频等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:C语言中,二级指针的用处,必要性和经常使用在的地方,求大神指导
描述:

C语言中,二级指针的用处,必要性和经常使用在的地方,求大神指导


解决方案1:

我见过四级指针

解决方案2:

动态申请二维数组以及其相关操作,其他情况貌似很少使用

解决方案3:

所有的二维数组

解决方案4:

链表头,链表尾

解决方案5:

main函数第二个参数
传入参数列表

解决方案6:

要理解二级指针的用法,必须先从根本上理解它的含义。其实含义很简单,二级指针即指针的指针。比如说,内存地址A中存放了一个地址,那么A就是一个指针;内存地址B中恰好存放了内存地址A,那么B就是一个指针的指针,即二级指针。

根据这个思路,说两种最常见的二级指针用法。

1.动态申请二维数组。

C++中动态申请一维数组,一般形式为

T *arr_t = new T[N];

也就是说,在堆上分配出N*sizeof(T)的空间,并让arr_t指向这块空间的起始地址。同理,动态申请二维数组的一般形式为:

T **arr_t = new T*[N];
for (int i = 0; i < N; ++i) {
  arr_t[i] = new T[M];
}

这里的arr_t指向的是一个指针数组的起始位置。也就是说,先在堆上分配一块空间,这块空间里面存的全都是指针。然后,在for循环内,对于每个指针,都要在堆上重新开辟一块大小为M*sizeof(T)的空间,这块空间才真正存储我们想要的数据,然后让指针指向这块空间的起始地址。而那块叫做“arr_t”的内存里,实际上存储的是指针数组的起始位置。

2.用于返回参数。

参考一个MSDN上的例子,假设有一个接口叫IDrawable,同时,有一个叫做Shape的类实现了这个接口。再假设有个图形库里面有这样一个函数:

HRESULT CreateShape(IDrawable** ppShape);

这个函数用于创建一个Shape对象。现在问题来了,创建好的Shape对象总要返回吧?而这个函数又恰好需要返回一个表示成功或失败的、类型为HRESULT的代码,那么创建好的Shape让谁返回呢?显然,需要通过参数ppShape来返回。这个函数的使用场景如下:

IDrawable *pShape;

HRESULT hr = CreateShape(&pShape);
if (SUCCEEDED(hr))
{
    // Use the Shape object.
}
else
{
    // An error occurred.
}

显然,pShape的作用就是指向堆上的某块空间,这个空间里存着一个Shape类型的对象。也就是说,我们之所以要把pShape传给函数CreateShape,就是想改变pShape的当前值(当前值可能为NULL,或者指向其他某个不确定的内存位置),让pShape真正指向堆上的Shape对象。于是,问题转化成“怎样真正改变传入函数的参数值”的问题。显然,在C++里,传引用或者传指针都能达到这个效果。这里用传指针的方法,如下图所示:

&pShape,即ppShape,是指向pShape所在地址的指针,也就是一个二级指针。这样就可以在CreateShape内部为pShape赋值了:

*ppShape = new Shape; 

于是,pShape真正指向了堆上的Shape对象。


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • (python)C语言算法题-开灯问题代码有点看不懂求大神指点?
  • 求大神解释下面的汇编语言是什么意思
  • C语言,数据结构,二叉树的递归构造,求大神教导,使其正常运行。
  • C语言中,二级指针的用处,必要性和经常使用在的地方,求大神指导

相关文章

  • 2017-06-07 PHP正则#info/list#u为什么反斜杠“/”可以不用转义
  • 2017-06-07 身份认证可否用中国护照来完成
  • 2017-06-07 python自动化项目在jenkins上运行的log文件
  • 2017-06-07 python的卸载
  • 2017-06-07 python技术的总要性
  • 2017-06-07 新手想问个JBOSS小问题刚接触请高手指教啊
  • 2017-06-07 TXT文本里的空格怎么转换成换行
  • 2017-06-07 邮编番号的正则表达式,所有字符串必须尽可能的包含下述
  • 2017-06-07 redisshutdown后会自动保存数据到硬盘吗
  • 2017-06-07 七牛的js的demo,在加载页面就要获取token值和初始化上传的信息,能否点击选择文件的时候获取

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 自己绑定的域名可以设置https,未来会增加这个功能么。
    • 七牛下载的连接建立时间太长
    • 未做任何修改,无故发生nosuchdomain问题
    • 学而不思则罔思而不学则殆关于正则全局匹配的问题
    • 跪求python的线程池问题
    • js调用代码如何用JS调用webapi获得json数据
    • 新手问题,请指教
    • 把pythonset对象存入redis后,取出后如何转化为json格式的
    • 前端提供一个接口或者调用后台接口
    • (python)WindowsFlask服务器程序关闭了之后,端口仍然偶尔出现处于监听状态

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有