结构体struct和typedef后⾯接指针的含义
在C语⾔⾥⾯,struct是⽤来定义新的数据类型——结构体,typedef是给数据类型取别名。
据说这两个关键词同时使⽤有助于减少代码量和增加代码的可读性(不过我认为它当typedef和struct在⼀起的时候反⽽降低了代码的可读性),很多时候为了⽅便,我们常常讲stuct与typedef放在⼀起⽤。
像这样的代码是⽐较好理解的,就是取FileInfo为sturct file的别名嘛。
typedef struct file {
...
}FileInfo ;
但是在严奶奶的《数据结构》那本书⾥⾯却充满了这样的⽤法:
typedef struct file {
...
}FileInfo ,  *FileP ;
这种⽤法让我感到很迷惑,经过了本⼈多⽅考证和验证,它是这么个意思:
给struct file 取个别名为FileInfo 给struct file * 取个别名为FileP
说也怪啊。你说⽤typedef struct … FileInfo增加代码的可读性,我勉强可以接受。
但是你说⽤typedef struct … *FileP可以增加代码的可读性,我真的是撞邪了。当我⾯对下⾯⼀⾏代码的时候指针变量的定义格式
FileP P
要不是其中的“P”,我还真的想不到变量“P”是⼀个指针。
有⼈评论说:您解释说 “ 给struct file * 取个别名为FileP ” 可能不是很准确,⽐如 “ int *p ” 准确的说法应该是 “ 定义p是指向⼀个整形变量的指针”,⽽没有 “ int* ” 这种变量类型,这个地⽅解释为 “ 给struct file 取别名为FileInfo,同时定义⼀个指向这个结构体的指针变量FileP ” 您看会不会更合适。
#include<stdio.h>
#include<string.h>
typedef struct emp{
char sex[8];
char name[15];
int age;
}*emp;//这⾥我们⽤typedef把emp这个结构体变成了*emp这种指向结构体成员的结构体指针
/*typedef struct emp{
char sex[8];
char name[15];
int age;
}pi,*emp;//为了程序的可读性最好不要这样声明*/
int main(){
emp p;//注意这⾥emp是指向结构体的指针变量 emp *p这样的声明是错误的,emp p这样声明了结构体类型的指针变量p
strcpy(p->sex,"male");
strcpy(p->name,"zhangfei");
p->age=20;
printf("sex is %s\n",p->sex);
printf("name is %s\n",p->name);
printf("Age is %d\n",p->age);
return 0;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。