在宏内键入的指针,C

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

举个简单的例子吧.@H_502_3@

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

这有效:@H_502_3@

INDEX_OF_DATA(buffer,float,3);

失败的地方:@H_502_3@

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

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

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

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

解决方法

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

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

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

#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;
}

这完全符合您的意图!@H_502_3@ @H_502_20@ @H_502_20@

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