C中相同变量的两个句柄

时间:2015-05-31 18:01:40

标签: c

有没有什么方法可以创建两个指向相同内存位置的变量,这样我可以读取与int,float,char相同的内存,以及我喜欢的任何方式?

我想要这样的东西,只是没有指向f的指针,所以每次读/写f时我都不需要取消引用。

char myArray[100];
float* f = (float *)&myArray[10];

我想在C中最接近C ++的引用。

我希望这个问题有道理。

编辑:我从闪存中读取流(4 Kb)的字节。此流包含短路,整数和浮点数。我知道这些整数和浮点数在阵列中的位置。我想读/写前面提到的int和浮点数,就像它们是普通变量一样。

2 个答案:

答案 0 :(得分:2)

此示例将数据读入预定义的struct,打包(如有必要)。小心endian-ness!数据类型:您的目标上的int可能是您的PC上的short

#include<stdio.h>

#pragma pack(push, 1)
struct mydata {
    int version;
    char title[16];
    float reading[8];
} mydata;

#pragma pack(pop)

int main(void)
{
    FILE *fp;
    struct mydata data = {0};
    fp = fopen("mydata.bin", "rb");

    if (1 != fread(&data, sizeof(data), 1, fp))
        { // error
        }

    printf("Version = %d\n", data.version);

    fclose(fp);
    return 0;
}

答案 1 :(得分:1)

这就是联盟存在的原因。

union u {
  char c[4];
  float f;
  int i; // assuming sizeof(int) = 4 for this example
};

union u cf;
cf.f = 1.;
int i = cf.i;

请注意,由于严格的别名,最后一行实际上不符合C标准。请参阅示例What is the strict aliasing rule?您应始终通过char l值访问二进制表示。