studentname='Jason'; studentclass='class 3';
studentresults={'English','Maths';85,95};
studentsystem=[1,2,3;4,5,6;7,8,9];
然后输入student,按回车查看创建的结构数组student,返回如下结果:
student =
name: 'Jason'
class: 'class 3'
results: {2x2 cell}
system: [3x3 double]
同时看到工作区出现名称为student,值为11的结构数组。
第二,通过struct函数创建结构数组。在命令行窗口输入clear all; clc按回车,清空命令行窗口,然后输入如下代码:
student=struct('name','Jason','class','class 3','results',{'English','Maths';85,95},'system',[1,2,3;4,5,6;7,8,9]);
然后输入student,按回车查看创建的结构数组student,返回如下结果:
student =
2x2 struct array with fields:
name
class
results
system
同时看到工作区出现名称为student,值为22的结构数组。
根据具体问题类型,进行步骤拆解/原因原理分析/内容拓展等。
具体步骤如下:/导致这种情况的原因主要是……
参考资料
在matlab中,读取struct里的double数组怎么办?百度经验[引用时间2018-1-11]
1 结构数组的创建 MATLAB提供了两种定义结构的方式:直接应用和使用struct函数。 a) 使用直接引用方式定义结构 与建立数值型数组一样,建立新struct对象不需要事先申明,可以直接引用,而且可以动态扩充。比如建立一个复数变量x:展开全部閟truct就可以使用结构体了:
import
struct
生成一个结构体实例:
data
=
structpack(
'format_string',
struct_menber_1,
struct_menber_2,
)
其中的format_string用来指定结构体的格式(指明该结构体在C中的定义),由两部分组成
typedef struct是定义一个标识符及关键字的别名,无具体含义。,它是语言编译过程的一部分,为了使用结构体方便。
例:typedef struct tagMyStruct MyStruct。
因此,MyStruct实际上相当于struct tagMyStruct,可以使用MyStruct varName来定义变量。
在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间。
typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。
在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。
扩展资料:
typedef struct 结构名:
{
类型 变量名;
类型 变量名;
} 结构别名;
//结构别名:只是结构的标示符——结构体类型
在C语言中,struct不能包含函数。在C++中,对struct进行了扩展,可以包含函数。
typedef常用来定义关键字、冗长的类型的别名。 宏定义只是简单的字符串代换(原地扩展),而typedef则不是原地扩展,它的新名字具有一定的封装性,以致于新命名的标识符具有更易定义变 量的功能。
参考资料来源:百度百科—typedef
#include <stdioh>#include <stdlibh>
struct content
{
char id[100];
char bookname[100];
char editorname[100];
char publishname[100];
struct content next;
};
int main()
{
FILE fp;///读文件用的文件指针
char root[1000];///记录文件所在的目录
scanf("%s",root);///输入文件所在的目录
fp=fopen(root,"r");///打开文件
if (fp==NULL)///如果文件指针为空,报错
{
printf("无法打开文件!\n");
return 0;
}
struct content p1,p2=NULL;
p1=(struct content)calloc(1,sizeof(struct content));
p2=p1;
while (fscanf(fp,"%s",p1->id)==-1)
{
fscanf(fp,"%s",p1->bookname);
fscanf(fp,"%s",p1->editorname);
fscanf(fp,"%s",p1->publishname);
p2->next=p1;
p2=p1;
p2->next=NULL;
p1=(struct content)calloc(1,sizeof(struct content));
}
return 0;
}
这是代码,没测试过,不知道对吧,高手不敢当,希望对你有用C语言中对结构体数据格式文件进行读取时,必须以二进制格式打开文件,然后按结构体类型变量内存块方式进行数据读取,相关读数据命令为fread()。
函数说明:
#include <stdioh>
size_t fread(void ptr, size_t size, size_t nmemb, FILE stream);
从stream文件流中,读取nmemb个size大小的数据块到ptr所指的内存buf中,返回读取到的有效数据块数。
如,有如下结构体定义:
typedef struct TEST
{
int num;
double score;
}STRTEST;
STRTEST data ;
FILE fp = fopen("filedat", "rb" ) ; //按二进制格式打开文件
int n=fread( &data, sizeof(STRTEST), 1, fp ); //读取一个数据块到变量data中。
注意,当结构体中定义的变量有指针类型时,在存储数据时,就不能按结构体进行存储了。
因为,指针变量中存储的是内存地址,而程序在不同环境运行时,所使用的内存地址是不同的,只存储内存地址,不能把真正的数据保存下来,所以,即使是正确读取到文件内容,也不能得到当时的结构体内存数据。因而,在存储结构体数据时,要根据结构体类型变量特点采用正确的方法进行存储,才能正确的读取。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)