使用指针,动态分配,结构时出错

Posted

技术标签:

【中文标题】使用指针,动态分配,结构时出错【英文标题】:error when using pointers, dynamically allocating ,struct 【发布时间】:2022-01-01 05:26:23 【问题描述】:

我的代码没有运行,我该如何解决它 我想我不明白我错在哪里

#include"stdio.h"
#include"stdlib.h"
#include"string.h"
struct nhanVien
    int code;
    char name[50];
    char sex[50];
    int numb;
    int wage;
;
void input(nhanVien *worker,int n)
    for(int i=0;i<n;i++)
        printf("Nhap ma nhanVien : ");
        scanf("%d",(worker->code+i));
        
    

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++)
        printf("Nhap ma nhanVien : %d \n",*(worker->code+i));
        
    
    free(worker);
    

一元'*'的无效类型参数(有'int')C中的错误 这是图片enter image description here

【问题讨论】:

scanf("%d",(worker-&gt;code+i)); - 这行应该做什么? worker-&gt;code+i 是一个整数,而 scanf 需要一个指针。 看起来worker-&gt;code+i 应该是worker[i].code @mch &amp;worker[i].code @EugeneSh。对于scanf,但不是printf 【参考方案1】:

我在你的代码中发现了一些问题,worker-&gt;code+i 应该是worker[i].code;您在 struct 类型上缺少 typedef。基本上,你想要类似的东西

#include"stdio.h"
#include"stdlib.h"
#include"string.h"

typedef struct 
    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 : ");
        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++) 
        printf("Nhap ma nhanVien : %d \n",worker[i].code);
    
    free(worker);

【讨论】:

【参考方案2】:

名称nhanVien 未声明。声明了类型说明符struct nhanVien

所以你需要使用这个名字作为例子

void input( struct nhanVien *worker,int n)

struct nhanVien *worker;

worker = (struct nhanVien*)malloc(n*sizeof( struct nhanVien));

scanf的这个调用

scanf("%d",(worker->code+i));

不正确。你需要写任何一个

scanf("%d", &( worker + i )->code);

scanf("%d", &worker[i].code);

还有这个 printf 调用

printf("Nhap ma nhanVien : %d \n",*(worker->code+i));

不正确。你需要写

printf("Nhap ma nhanVien : %d \n", worker[i].code);

【讨论】:

以上是关于使用指针,动态分配,结构时出错的主要内容,如果未能解决你的问题,请参考以下文章

c 链表和动态内存分配

将结构成员指针分配给另一个动态内存分配的指针是不是安全?

动态分配的指向结构(链表)的指针数组,以及如何访问每个列表?

Qt,动态分配内存

C++:使用函数为二维数组分配内存时出错

怎么动态分配指针数组