如何将null赋给struct的指针?

时间:2014-11-14 16:22:12

标签: c arrays eclipse pointers struct

我不确定我是否具体而且清晰。 但不清楚怀疑。 我正在尝试为指针分配NULL值。

给出代码:

typedef struct Date
{
int year;
int month;
}Date;

typedef struct Record
{
    char name[20];
    char cdate[20];
    float quanitity;
    int barcode;
    Date date;
}Record;

然后在main:

Record *records = malloc(10 * sizeof(Record));
records[0] = NULL;

当我定义一个premitive类型的similliar数组时,这是行不通的,例如int 我可以分配值,或NULL 例如

int *avi = malloc(sizeof(int)*10);
avi[0] = 3;
avi [0] = NULL;

它工作正常,我打印了价值并看到了变化。 但是,当我对结构的指针数组执行相同操作时,如上所述 我只是不能指定一个NULL值..

无能。 我正在使用eclipse IDE。 提前谢谢。

3 个答案:

答案 0 :(得分:1)

您的问题是records是指向10个对象的指针。因此,records[0]是第一个对象。您无法将对象设置为NULL

它似乎仅适用于int,因为您将int设置为零,而不是NULL

答案 1 :(得分:0)

NULL是一个内置常量,其值为0.这就是为什么你可以将它分配给原始类型,如int和char。它适用于指针,因为C语言的特定结构告诉编译器“0”表示“指向无效的内存地址”,这可能不是实际值“0”。

您对结构类型的NULL赋值不起作用,因为您无法将结构设置为整数类型。

答案 2 :(得分:0)

这里是创建指向Record结构的指针数组的示例。因为数组包含指向Record结构的指针,而不是直接包含Record结构,所以可以将指针设置为NULL-如果数组直接包含Record结构,则无法执行此操作。

#include <stdlib.h>

typedef struct Date
{
    int year;
    int month;
}Date;

typedef struct Record
{
    char name[20];
    char cdate[20];
    float quanitity;
    int barcode;
    Date date;
}Record;

int main()
{
    // We start by creating an array of 10 Record pointers.
    // records is a pointer to the array we create
    Record **records = malloc(10 * sizeof(Record*));
    // First thing is first - did it work?
    // There is no point in doing anything else if the array didn't get created
    if (records != NULL) {
        // The Record pointers are uninitialized
        // Arrays don't do that automatically
        // So we need to initialize all the pointers
        // in this case we set them all to NULL
        for (int i=0;i<10;i++)
            records[i] = NULL;
        // Later on in the program we might want to
        // create one Record structure and assign it to records[5]
        records[5] = malloc(sizeof(Record));
        // Again, we need to check if the Record structure got created
        if (records[5] != NULL) {
            // Do something with this Record structure
            // Fill it in, print it out, etc.
        }
        // Then at the end of the program
        // we want to deallocate all the Record structures we created
        for (int i=0;i<10;i++)
            if (records[i] != NULL)
                free(records[i]);
        // And finally we need to deallocate the array of pointers
        free(records);
    }
    return 0;
}