我创建了一个函数,该函数返回指向自制结构对象的指针。然后,我声明了另一个指针,我将其设置为等于上述函数返回的指针。我得到一个错误“赋值使整数指针不带强制转换”-但我不明白为什么我要强制转换。。。因为所有这些指针都声明为同一类型。
在disk.h中,我定义了以下内容:

struct generic_attribute{
    char *name;
    int current_value;
    int previous_value;
    //int time_series[500];
};

在disk.c中,我为泛型属性创建了一个构造函数,如下所示:
#include "disk.h"
#include <stdlib.h>
#include <stdarg.h>
#include <stdio.h>
#include <string.h>

struct generic_attribute* construct_generic_attribute(char* name, int current_value){
    struct generic_attribute *ga_ptr;
    //ga_ptr = (struct generic_attribute*) malloc (sizeof(struct generic_attribute));
    ga_ptr = malloc (sizeof (struct generic_attribute));
    ga_ptr -> name = name;
    ga_ptr -> current_value = current_value;
    ga_ptr -> previous_value = 0;
    return ga_ptr;
}

在disk_test.c中,我要测试此构造函数:
#include "disk.h"
#include <stdlib.h>
#include <stdarg.h>
#include <stdio.h>
#include <string.h>

void test_generic_attribute_constructor(char* name, int current_value){
    struct generic_attribute* ga_ptr;
    ga_ptr = construct_generic_attribute(name, current_value);
    printf("%i\n", construct_generic_attribute(name, current_value));
}

int main() {
    test_generic_attribute_constructor("test", 2000);
}

我在这条线上看到错误:
ga_ptr = construct_generic_attribute(name, current_value);

我不明白为什么。ga_pointer被声明为指向类型struct generic_attribute的指针。函数的返回也是如此。我是新来的C,所以我可能会误解这一切是如何运作的。

最佳答案

您没有在construct_generic_attribute()中声明disk.h,因此在看到函数调用时,编译器假定它具有默认签名,即int construct_generic_attribute();
谢谢你质疑这一点,而不是盲目地增加演员阵容(这似乎是可行的!)

关于c - 在C中转换指标,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31032971/

10-12 07:25