① c语言里结构体定义
因为:
c语言定义结构体的同时如果使用了typedef,则以后使用这个类型的时候,就不需要struct
② C语言结构体定义
C语言结构体定义:struct为结构体关键字,tag为结构体的标志,member-list为结构体成员列表,其必须列出其所有成员;variable-list为此结构体声明的变量。
结构体是C语言中聚合数据类型(aggregatedatatype)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。
(2)c语言编译器怎么读取结构体的定义扩展阅读
1、struct是声明结构体类型时必须使用的关键字,不能省略。“结构体”这个词是根据英文单词structure译出的。
2、structSTUDENT是定义的数据类型的名字,它向编译系统声明这是一个“结构体类型”,包括name、num、sex、age、score、addr等不同类型的项。
3、structSTUDENT与系统提供的int、char、float、double等标准类型名一样,都是数据类型,具有同样的作用,都是用来定义变量的。
③ C语言对结构体文件的读取
这个结构体
typedef struct TEST
{
char* ch;
char* cha;
}TESTFEI;
按读取文件要求来说,本身就有问题
char* ch;
char* cha;
ch,cha 是 char 指针 ,应该是char数组
还是在读取文件之前分配了空间???
写个例子
typedef struct TEST
{
char ch[20];
char cha[10];
}TESTFEI;
long ReadBData(TESTFEI* Record, const char* szFileName)
{
FILE *stream;
long total;
if (NULL == (stream = fopen(szFileName, "rb+")))
{
return 0L;
}
total = filelength(fileno(stream)) / sizeof(TESTFEI);
fseek(stream, 0L, SEEK_SET);//移动文件指针到开始
fread(Record, sizeof(TESTFEI), total, stream);
fclose(stream);
return total;
}
函数返回读取的记录数
④ C语言 结构体定义
这题目与结构体根本无关嘛!
inline关键字表示函数是内联函数,也就是把调用函数的语句替换成函数体;
u32 base; u32是数据类型,相当于unsigned int。这句话就是定义一个u32类型的变量base;
KSEG0ADDR:应该是一个宏定义,一般来说宏定义才会全部用大写。
⑤ C语言中定义结构体的几种方法
1、先定义结构体类型,再定义结构体变量。
structstudent{
charno[20];//学号
charname[20];//姓名
charsex[5];//性别
intage;//年龄
};
structstudentstu1,stu2;
//此时stu1,stu2为student结构体变量
2、定义结构体类型的同时定义结构体变量。
structstudent{
charno[20];//学号
charname[20];//姓名
charsex[5];//性别
intage;//年龄
}stu1,stu2;
3、直接定义结构体变量。
struct{
charno[20];//学号
charname[20];//姓名
charsex[5];//性别
intage;//年龄
}stu1,stu2;
(5)c语言编译器怎么读取结构体的定义扩展阅读
结构体的定义
在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregatedatatype)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。
结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。结构体,他就将不同类型的数据存放在一起,作为一个整体进行处理。
⑥ c语言,怎么从文件读取数据到结构体,求助
C 结构体
实现读取文件并保存到结构体代码:
#include<stdio.h>
#include<stdlib.h>
//文件操作格式化读取保存到结构体数组
#defineBUFSIZE1000
structdata
{
charG[4];
floatXs;//起点坐标
floatYs;
floatE;
};
intmain()
{
FILE*fp;
inti,j,r_n=0;
charbuf[BUFSIZE],c;
//打开文件
fp=fopen("E:\\line.txt","r");
if(fp==NULL)
{
printf("Cannotopenfile!\n");
return1;
}
//计算文件中数据的行数
while(!feof(fp))
{c=fgetc(fp);
if(c=='\n')
r_n++;
}
printf("r_n=%d\n",r_n);
rewind(fp);//将指针重置到第一行
structdata*line1=NULL;
line1=(structdata*)malloc(sizeof(structdata)*(r_n+1));//创建一个结构体含有(r_n+1)个数据
for(i=1;i<=r_n;i++)
{
fgets(buf,BUFSIZE,fp);//一次读取一行
sscanf(buf,"%sX%fY%fE%f",&line1[i].G,&line1[i].Xs,&line1[i].Ys,&line1[i].E);//分别跳过XYE读取数据
}
//关闭文件
fclose(fp);
for(i=1;i<=r_n-1;i++)
{
printf("\n%s%.3f%.3f%.3f",line1[i].G,line1[i].Xs,line1[i].Ys,&line1[i].E);
}
free(line1);//释放
return0;
}
运行效果:
函数sscanf(),它是C语言中从一个字符串中读进与指定格式相符的数据的函数。
函数原型:
intsscanf(stringstr,stringfmt,mixedvar1,mixedvar2...);
intscanf(constchar*format[,argument]...);
sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。
其中的format可以是一个或多个{%[*][width][{h|l|I64|L}]type|''|'\t'|'\n'|非%符号}
注:
1、*亦可用于格式中,(即%*d和%*s)加了星号(*)表示跳过此数据不读入.(也就是不把此数据读入参数中)
2、{a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。
3、width表示读取宽度。
4、{h|l|I64|L}:参数的size,通常h表示单字节size,I表示2字节size,L表示4字节size(double例外),l64表示8字节size。
5、type:这就很多了,就是%s,%d之类。
6、特别的:%*[width][{h|l|I64|L}]type表示满足该条件的被过滤掉,不会向目标参数中写入值
支持集合操作:
%[a-z]表示匹配a到z中任意字符,贪婪性(尽可能多的匹配)
%[aB']匹配a、B、'中一员,贪婪性
%[^a]匹配非a的任意字符,贪婪性
⑦ c语言怎么用文件保存和读取 结构体数组/
结构体数据的保存通常以二进制形式进行.
FILE *fw = fopen(filename,"wb");
写函数是fwrite(&structdata,sizeof(structdata),1,fw);
FILE *fr = fopen(filename,"rb");
读函数是fread(*structdata,sizeof(structdata),1,fr);
每次读写都是一个完整的结构体数据。
⑧ c语言中如何定义一个结构体
结构体的定义如下所示,struct为结构体关键字,tag为结构体的标志,member-list为结构体成员列表,其必须列出其所有成员;variable-list为此结构体声明的变量。在一般情况下,tag、member-list、variable-list这3部分至少要出现2个。
结构体的成员可以包含其他结构体,也可以包含指向自己结构体类型的指针,而通常这种指针的应用是为了实现一些更高级的数据结构如链表和树等。如果两个结构体互相包含,则需要对其中一个结构体进行不完整声明。
(8)c语言编译器怎么读取结构体的定义扩展阅读:
一、结构体作用:
结构体和其他类型基础数据类型一样,例如int类型,char类型,只不过结构体可以做成你想要的数据类型,以方便日后的使用。
在实际项目中,结构体是大量存在的,研发人员常使用结构体来封装一些属性来组成新的类型。由于C语言内部程序比较简单,研发人员通常使用结构体创造新的“属性”,其目的是简化运算。
结构体在函数中的作用不是简便,其最主要的作用就是封装。封装的好处就是可以再次利用。让使用者不必关心这个是什么,只要根据定义使用就可以了。
二、结构体的大小与内存对齐:
结构体的大小不是结构体元素单纯相加就行的,因为我们主流的计算机使用的都是32bit字长的CPU,对这类型的CPU取4个字节的数要比取一个字节要高效,也更方便。
所以在结构体中每个成员的首地址都是4的整数倍的话,取数据元素时就会相对更高效,这就是内存对齐的由来。每个特定平台上的编译器都有自己的默认“对齐系数”(也叫对齐模数)。
程序员可以通过预编译命令#pragma pack(n),n=1,2,4,8,16来改变这一系数,其中的n就是你要指定的“对齐系数”。
三、结构体的规则:
1、数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员的对齐按照#pragma pack指定的数值和这个数据成员自身长度中,比较小的那个进行。
2、结构(或联合)的整体对齐规则:在数据成员完成各自对齐之后,结构(或联合)本身也要进行对齐,对齐将按照#pragma pack指定的数值和结构(或联合)最大数据成员长度中,比较小的那个进行。
3、结合1、2可推断:当#pragma pack的n值等于或超过所有数据成员长度的时候,这个n值的大小将不产生任何效果。