【问题标题】:Questions about void pointers关于空指针的问题
【发布时间】:2015-09-27 00:58:01
【问题描述】:

我有两个关于 void 指针的问题;我们有:

void * foo=malloc(99) 
void **bar=(void**)malloc(99);

int i=1;
bar++;
*bar = foo;

1.上面和下面是等价的吗?

bar[i++] = foo;

如果是,则出乎意料,因为bar++; 向前移动双指针而不是单指针,这与非 void 类型不同。

2.为什么可以从void * foo();返回void**

例如:

 void * foo(){
     void ** bar;
     return bar;
 }

【问题讨论】:

    标签: c syntax void-pointers


    【解决方案1】:

    1.上面和下面是等价的吗?

    bar[i++] = foo;
    

    如果是,那是意料之外的,因为 bar++;移动双 指针前向而不是单指针,这与非 空类型。

    这很好,因为bar 是一个指向指针数组的指针。 void* 的大小是已知的(它是指针的大小),因此您知道 void** 数组的下一个元素在哪里。

    2.为什么从void * foo();返回void**可以?

    因为void* 是指向任何东西的指针。指向任何东西的指针就是指向任何东西的指针,因此void** 可以隐式转换为void*

    【讨论】:

    • 但是bar[i++] 推进了void* 类型,bar++; 推进了void** 类型。
    • @kuhaku 不,他们没有。 bar[i++]ith 位置访问barvoid**),并递增ibar++bar 提高一个元素。
    • "指向任何东西的指针就是指向任何东西的指针" -- 最好说它是指向 something 的指针(只有 void* 是指向任何东西的指针)。
    猜你喜欢
    • 2014-05-13
    • 2011-12-09
    • 2023-01-08
    • 2020-08-25
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多