Scotttty 2017-12-06 07:43 采纳率: 100%
浏览 1034
已采纳

C语言关于结构体传参的一点疑问(希望帮忙调一个小代码)

#include
#include
#include
#define N 4

typedef struct list{
char name[5];
long num;
long tell;
char address[5];
int math;
int C;
}LIST;
LIST stu[N];
void test();
int total[N];
int main(){
int j;

test();

for (j=0;j<N;j++){
    total[j]=stu[j].C+stu[j].math;
}

void xian(LIST P[N],int a[N]);
xian(stu,total);
return 0;
}
void test(){/*测试初始化*/
LIST stu01[4] =
{
{"李",201455,15079852222,"重庆",97,89},
{"张",201456,15073852222,"上海",97,95},
{"i",201457,15079886222,"松江",85,89},
{"李",201458,15079852962,"重庆",93,79}
};
memcpy(&stu[0],&stu01[0],sizeof(stu01)*4);
}
void xian(LIST P[N],int a[N]){/*显示*/
int i;
for (i=0;i<N;i++){
printf("\n");
printf("%s\t",P[i].name);
printf("%ld\t",P[i].num);
printf("%ld\t",P[i].tell);
printf("%s\t",P[i].address);
printf("%d\t",P[i].math);
printf("%d\t",P[i].C);
printf("%d\t",a[i]);
printf("%d\t",a[i]/2);
}
}

  • 写回答

1条回答 默认 最新

  • God_Gray 2017-12-06 14:39
    关注

    memcpy(&stu[0], &stu01[0], sizeof(stu01) * 4); 这里memcpy的第三个参数是内存拷贝长度,sizeof(stu01) * 4计算的长度等于sizeof(LIST)*4*4,
    长度多计算了4倍。要注意,sizeof(stu01)计算的是stu01变量的长度,stu01的类型是LIST [4] ,是一个有4个“LIST结构体”元素的数组,大小等于sizeof(LIST)*4。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀
  • ¥15 flink cdc无法实时同步mysql数据
  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。