赋值从指针生成整数而不在 C 中强制转换

assignment makes integer from pointer without cast in C

我的DATABASES中有一个项目class,老师要求我们创建一个程序来计算基于属性的关系的CLOSURE。 我输入了计算闭包的函数的第一部分,但编译器不断发出此警告:

warning : assignment makes integer from pointer without cast

这里是函数和结构:

typedef struct df {
    char PG[20];
    char PD[20];
} DF;
char *Closure(DF *T, char *C, int sizeFD, char att, int n) {
    int i, j;
    j = 0;
    C[j] = att;
    for (i = 0; i < sizeFD; i++) {
        if (T[i].PG == &att) {
            j++;
            C[j] = T[i].PD;  // this is where there's the warning
        }
    }
    if (j == n)
        exit(EXIT_SUCCESS);
    return C;
}

我需要你的帮助,请指点我正确的方向。

违规陈述是:

C[j] = T[i].PD;

C是一个char *,因此C[j]是一个char,不能赋值T[i].PD,这是一个数组,decays 作为指向 char 的指针。

请注意,T[i].PG == &att 始终为假,因为 att 是局部变量,而 T[i].PG 是结构中的数组。

不清楚代码试图做什么。

C[j]=T[i].PD; 

我们来分解一下。首先 C 是 char* 类型和

C[j] ==> *(C + j) // type char

意思是你写的是C+j所在位置的值。

下一个 T[i].PD 是一个 char* 但 C[j] 是 char 类型。

现在 C 是一种有点奇怪的语言,因为它处理这些类型的转换并将 T[i].PD 视为整数。对于 C,一切都是底层的,它相信你知道类型之间的关系。