C语言中,二级指针的用处,必要性和经常使用在的地方,求大神指导-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

2016-06-08 22:58:28 3115 1

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

取消 提交回答
全部回答(1)
  • a123456678
    2019-07-17 19:32:52

    要理解二级指针的用法,必须先从根本上理解它的含义。其实含义很简单,二级指针即指针的指针。比如说,内存地址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++里,传引用或者传指针都能达到这个效果。这里用传指针的方法,如下图所示:
    screenshot

    0 0
相关问答

1

回答

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

2016-06-12 10:33:04 1926浏览量 回答数 1

1

回答

c语言指针问题 char *p="abcdefg"+1; 为?报错

2020-06-24 14:05:33 404浏览量 回答数 1

1

回答

C语言声明结构的指针的问题。

2016-06-07 19:49:27 1677浏览量 回答数 1

6

回答

关于C语言指针的问题

2016-06-06 09:56:02 2328浏览量 回答数 6

4

回答

c语言函数中传地址跟传指针有什么不同?

2016-06-06 09:51:26 2125浏览量 回答数 4

1

回答

C语言指针传值和传地址问题

2016-06-06 09:46:05 1697浏览量 回答数 1

1

回答

C语言初始化数组导致指针重叠

2016-05-30 14:17:32 2132浏览量 回答数 1

1

回答

C语言:进程间传递指针来实现数据操作是否会有安全隐患?

2016-03-20 11:23:26 1872浏览量 回答数 1

4

回答

初学 C语言,请问有什么书或者习题集是可以强化指对指针的理解的吗?

2016-03-20 09:37:13 2159浏览量 回答数 4

1

回答

c语言,指针那一块,关于重新编写strlen函数

2016-03-19 14:15:05 1709浏览量 回答数 1
+关注
0
文章
14879
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载