关于结构体数组指针的问题

mswag 2012-12-09 02:37:48
typedef struct{
char name[8];
int age;
} people;
int main(int argc, char** argv)
{
int i;
char temp[8];
people *p_map;
people aa;
memset(&aa,0, sizeof(aa));
strcpy(aa.name,"1234");
aa.age=8;
p_map=&aa;
printf("the len ==[%d]\n",sizeof(*p_map));
p_map=(people *)malloc(61);
memset(temp, 0x00, sizeof(temp)) ;
strcpy(temp,"test") ;
temp[4]='0';
for(i = 0;i<5;i++)
{
temp[4]+=1;
strncpy((p_map+i)->name,temp,5);
(p_map+i)->age=0+i;
printf("name==[%s],age==[%d]\n",(p_map+i)->name,(p_map+i)->age);
}
printf("the len ==[%d]\n",sizeof(*p_map));
以上一段的代码中前面明明定义的是结构体指针(people *p_map;),为什么后面可以使用结构体数组指针((p_map+i)->name),求解中......
...全文
188 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
prajna 2012-12-16
  • 打赏
  • 举报
回复
如果喜歡用指針: people * p_tmp = p_map; for(i = 0;i<5;i++) { temp[4]+=1; strncpy(p_tmp->name,temp,5); p_tmp->age=0+i; printf("name==[%s],age==[%d]\n",p_tmp->name,p_tmp->age); p_tmp++; }
prajna 2012-12-16
  • 打赏
  • 举报
回复
printf("name==[%s],age==[%d]\n",(p_map+i)->name,(p_map+i)->age); 等價于 printf("name==[%s],age==[%d]\n",p_map[i].name,p_map[i].age);
Lena-Yang 2012-12-16
  • 打赏
  • 举报
回复
刚学完指针,有些迷糊。 但老师教我们的结构体指针就是这样用的
mswag 2012-12-16
  • 打赏
  • 举报
回复
有没有更让我明白的回答给到我呢???
wzywsk 2012-12-11
  • 打赏
  • 举报
回复
printf("name==[%s],age==[%d]\n",(p_map +i)->name,(p_map +i)->age);/* 同理 */ printf("name==[%s],age==[%d]\n",(*(p_map +i)).name,(*(p_map +i)).age); printf("name==[%s],age==[%d]\n",p_map[i].name,p_map[i].age);
mswag 2012-12-10
  • 打赏
  • 举报
回复
其实对 AnYidan 的说法是有一个抽象的理解的,呵呵
mswag 2012-12-10
  • 打赏
  • 举报
回复
那个数字61是我为了更好看出空间的大小而特意写的,风格我们可以先放一边不管(其实是p_map = (people *)malloc(sizeof(people) * n);) 但我问题的关键在于结构体指针和结构体数组指针,也就是以下这句不大懂理解: printf("name==[%s],age==[%d]\n",(p_map+i)->name,(p_map+i)->age); 是不是可以从内存寻址方面来理解???
AnYidan 2012-12-09
  • 打赏
  • 举报
回复
关键在此句 p_map=(people *)malloc(61); 申请了 61 个 char 空间 假设 sizeof (people) = 12 bytes. 则指向 可容纳5 个元素的一维结构数组
zhuyf87 2012-12-09
  • 打赏
  • 举报
回复
people * p_map; ... p_map=(people *)malloc(61); ... strncpy((p_map+i)->name,temp,5); (p_map+i)->age=0+i; 语法编译的过,但程序的风格是不是差了点。 p_map = (people *)malloc(sizeof(people) * n);
茶海飘香 2012-12-09
  • 打赏
  • 举报
回复
数组本身描述就是指针。 这段代码写得很一般,初学者建议去看成熟代码,这种代码看多了,你语法可以了,习惯却差了

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧