赋值形式不兼容的指针类型

assignment form incompatible pointer type

我收到一条警告,指出从不兼容的指针类型赋值。 我是编程新手,尽了最大努力,但仍然无法弄清楚。 我收到以下错误: 20 6 D:\DS programs\practical 2\employees_structure_pointer.c [警告] 来自不兼容指针类型的赋值

/* Accept n employee details using structure and pointer and display their details. */

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

struct employee
{
    int no,salary;
    char name[10],desig[10];
}*ptr;

int main()
{
    int i,n;
    printf("Enter total number of employees: ");
    scanf("%d",&n);
    
    ptr = (int*)calloc(n,sizeof(struct employee));
    printf("\nEnter employee details: \n");
    for(i=0;i<n;i++)
    {
        printf("Enter employee number: ");
        scanf("%d",&(ptr+i)->no);
        printf("Enter name of the employee: ");
        scanf("%s",(ptr+i)->name);
        printf("Enter designation of the employee: ");
        scanf("%s",(ptr+i)->desig);
        printf("Enter salary of the employee: ");
        scanf("%d",&(ptr+i)->salary);
        printf("\n");
    }
    
    printf("Employee details are: \n");
    for(i=0;i<n;i++)
    {
        printf("\nEmployee number is: %d",(ptr+i)->no);
        printf("\nEmployee name is: %s",(ptr+i)->name);
        printf("\nEmployee designation is: %s",(ptr+i)->desig);
        printf("\nEmployee salary is: %d",(ptr+i)->salary);
    }
    return 0;
}

您将 ptr 定义为 struct employee:

的指针
struct employee
{
    int no,salary;
    char name[10],desig[10];
}*ptr;

然后你分配内存来保存n这样的结构的动态数组:

ptr = (int*)calloc(n,sizeof(struct employee));

函数 callocmalloc return 指向 void 的指针,void *。您将该指针明确地转换为指向 int 的指针。此赋值的右侧现在具有类型 int *.

左侧需要 struct employee *。就是你的指针不兼容。

c/malloc returns a void *是有原因的:在C语言中,指向void的指针可以赋值给任何指针类型而无需强制转换。所以你不需要演员表。你的内存分配应该是:

ptr = calloc(n, sizeof(struct employee));

或者也许

ptr = calloc(n, sizeof(*ptr));

另一方面,C++ 需要显式转换,因此有些人无论如何都会进行转换以与 C++ 编译器兼容。如果这样做,则必须强制转换为正确的指针类型。 (显式转换使得 malloc 在 C++ 中非常冗长,但无论如何您通常会使用 new。)