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
相关产品推荐
相关产品推荐

