在宏内键入的指针,C

前端之家收集整理的这篇文章主要介绍了在宏内键入的指针,C前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图表达指向宏中的类型的指针时遇到了问题.

举个简单的例子吧.

#define INDEX_OF_DATA(data,type,index) \
    ((type *)data)[index]

这有效:

INDEX_OF_DATA(buffer,float,3);

失败的地方:

INDEX_OF_DATA(buffer,float[2],3);

因为演员表应该是(float(*)[2]).

有没有办法表达“类型的指针”,…没有使用typeof? (这不是标准C).

注意,当然还有其他方法可以使这个特定的例子起作用.例如,转换为char并通过sizeof(type)* index进行偏移.但我对表达C语言指针的方式感兴趣.

解决方法

使用C类型执行非常复杂的操作可能是一项有趣的运动,但它在实际代码中非常混乱.

为了避免过多地破坏复杂的指针表达式,人们经常使用typedef!

如果你输入你期望用你的宏的所有类型,你就不会有任何问题.注意:

#include <stdlib.h>

#define INDEX_OF_DATA(data,index) \
    ((type *)data)[index]


int main(void) {
    float (*buffer)[2] = malloc(4 * sizeof(float[2]));

    typedef float t_f2arr[2];

    INDEX_OF_DATA(buffer,t_f2arr,3)[0] = 1.1f;

    return 0;
}

这完全符合您的意图!

猜你在找的C&C++相关文章