gcc警告:赋值在没有强制转换的情况下从指针生成整数

时间:2012-06-20 01:04:55

标签: c pointers gcc warnings

我正在我的程序中完成这项任务,我正在收到标题的警告。以下是代码段:

table_name[index] = NULL;

我无法理解在这样的陈述中会出现什么问题。

3 个答案:

答案 0 :(得分:6)

NULL 是一个有效的整数,它被分配给一个由大概int组成的数组的条目,所以编译器在抱怨。

NULL用作默认指针值,表示"没有" ..如果你有一个指针变量并为其指定了NULL,你就是说指针变量指向"没有"。

由于此类型不匹配,特定消息警告您试图将一种类型(实际上是指针值)分配给另一种类型(int)而不尝试将其强制转换(这是我们有时将一种类型转换为另一种类型以避免类型不匹配的原因。)

如果你有一个指针的数组,那么这个NULL分配就完全可以。

答案 1 :(得分:1)

问题是table_name[index]是整数值,而不是指针。 NULL旨在表示指针。

如果table_name被声明为int*,您可以table_name = NULL;没有问题,但是当在索引设置值时,编译器将会希望您使用与数组相同的类型。

答案 2 :(得分:0)

当我尝试将指针值分配给varriable(总是相同的数据类型)时,我对编译器有同样的反应..

示例:

#include <stdio.h>
#include <stdlib.h>

int main(){

    int X,Y;
    int *P_1;
    float Z;
    float *P_2;

    X=5;
    Z=3.5;
    P_1=&X;
    printf("\n X = %d, Z = %.2f\n",X,Z);
    printf(" &X = %d\n",&X);
    printf(" *P_1 = %d\n",*P_1);
    printf(" P_1 = %d\n",P_1);  

    Y=X;
    printf(" Y = %d\n",Y);

    X=10;
    Y=P_1;
    fflush(stdin);
    getchar();
    return 0;   
}