You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言使用指针、动态内存分配、struct时报错该如何解决

错误根因
  • 结构体成员访问逻辑错误:worker是struct nhanVien类型的数组指针,你写的worker->code+i是先取出数组首元素的code属性(为int类型值)再加偏移量i,得到的结果仍为int类型,对int类型执行*解引用操作不符合C语法要求,因此触发Invalid type argument of unary '*' (have 'int')报错。
  • 结构体类型声明不规范:C语言中如果没有使用typedef对结构体类型重命名,声明结构体变量时需要加struct关键字,你的代码中省略了该关键字也会导致编译报错。
  • scanf参数不符合要求:读取int类型变量需要传入变量的内存地址,原代码传入的是非法的int类型计算值,无法完成输入写入。
修正后可运行代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 使用typedef对结构体类型重命名,后续声明变量无需再加struct关键字
typedef struct nhanVien{
    int code;
    char name[50];
    char sex[50];
    int numb;
    int wage;
} nhanVien;

void input(nhanVien *worker,int n){
    for(int i=0;i<n;i++){
        printf("Nhap ma nhanVien : ");
        // 传入第i个结构体的code成员的地址
        scanf("%d", &(worker[i].code));
    }
}

int main(){
    nhanVien *worker;
    int n;
    printf("Nhap so luong nhan vien : ");
    scanf("%d",&n);
    worker = (nhanVien*)malloc(n*sizeof(nhanVien));
    input(worker,n);
    for(int i=0;i<n;i++){
        // 直接读取第i个结构体的code成员值,无需额外解引用
        printf("Nhap ma nhanVien : %d \n", worker[i].code);
    }
    free(worker);
    return 0;
}

内容的提问来源于stack exchange,提问作者Ngoc Anh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 01:45:01