c语言中将结构体数组写入文件的题?
fwrite(&cus[i],sizeof(structclient),1,fp);这一句的作用:
将数组cus的第i+1个结构体写入文件。因为他传入的是指针&cus[i],即第i+1个元素的首位地址,而且写入的长度是该结构体类型的size。
如果你想要把整个结构体数组都写入文件,则应该为:
fwrite(cus,sizeof(cus),1,fp);
或者
fwrite(&cus[0],sizeof(cus),1,fp);
对于像结构体和数组这样的串行数据,在内存中是连续存储的。所以我们在处理的时候,经常只需要确认它的首地址和长度就ok了.对这一点应用熟练了,你会充分感受到指针带来的便捷,在很多问题上也就如鱼得水……
仅供参考!
c语言有什么数组?
C语言中都有什么类型数组?
我们常见的C需要类型数组有:
char:只允许输入字符,
int:是整型变量,输入整数,范围不大,在-32767到32767,
float:输入可以使小数也可以输入整数,在不确定的情况下,就用float,范围还是比较的大,
double:如果说float是四个字节的话,大伯是八个字节。范围比float大好多。
C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。 尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性。
以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。 二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。
目前2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。
c语言中数组可以存放多少个值?
在C语言中,数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数,c[3]是可以存储3个字符的,c[n]就是存储n个字符,n是int整形常量.c[3],的确,他只可以储存三个字符,分别储存在c[0],c[1],c[2],
C语言学到数组了,感觉有点难,你能举例子说说数组怎么用吗?使用数组要注意什么吗?
谢邀。
C语言已经是非常简洁的编程语言了,数组肯定不是多余的语法了。可以说,数组基本上是所有现代高级编程语言不可或缺的语法了。但是C语言中的数组并不难,题主也不用太担心自己学不会。
我的上一个回答,讨论了C语言中的结构体,它是一种复合数据类型,有了结构体,C语言可以应对各种复杂的数据模型,比如上一节的平行四边形问题。
但是有些问题,就算是结构体,也很难解决。请看下面这个问题:
小明班级有 60 个人,期末考试出成绩后,编写C语言程序找出这 60 个人的最高得分。
这当然不是什么难题,会判断两个数的大小就能解决这个问题。只不过,这 60 个人的成绩怎么用 C 语言描述呢?定义 60 个变量?这样是不是太麻烦了?就算不嫌麻烦,比较两个数大小的逻辑怎么写呢,每两个变量就得写一个 if ?
这时C语言的数组就很好用了
和结构体类似,数组也是一种复合数据类型,只不过,数组是由一系列相同类型的元素组成的。比如上面 60 人的成绩得分,每一个人的得分在C语言中都可以用 float 来定义,属于同一数据类型,所以这 60 个人的成绩得分,在C语言中可以定义为:
float score[60];
score 后面的 [60] 表示一共有 60 个 score 这样的(即 float 类型的)数据,所以 60 个同学的成绩得分,C语言程序定义这么一个数组就可以了,并不需要定义多个变量。如果人数更多,把 60 改大些就可以解决。
请看上图,我们用方框表示数组的存储单元(元素),一系列方框在一起组成了数组。方框里面的数字是成绩得分,方框外面的数字是数组的下标,每个存储单元可以用数组名+下标访问:score[0],score[1],score[28] 等等。
注意,在定义数组时,float score[60]; 这里的 60 表示数组长度,而在访问时, score[60] 这里的 60 是指 score 数组的第 60 个元素。
和我们平常数数不同,数组元素是从“第0个”开始数的,大多数编程语言都是这么规定的。这样规定使得访问数组元素非常方便,比如 score 数组中的每个元素占 4 个字节,则 score[i] 位于从数组开头跳过 4 * i 个字节的存储位置。score[i] 也可以做左值,i 也可以是表达式:
只要确保下标都是整数,这些都是合法的。
数组的初始化结构体相似,例如:
float score[60] = {68.0, 84.2, };
如果定义数组同时初始化它,可以不指定数组长度,例如:
float score[] = {68.0, 84.2, 77.7};
这时,编译器会根据初始化信息确定 score 数组的长度为 3。不过,结构体可以互相赋值,数组却不能互相赋值:
既然数组不能互相赋值,也就不能用数组类型作为函数的返回值。这部分内容,可能需要讨论到指针,鉴于题主才学到数组,就不展开讨论了。
使用C语言数组解决上述问题
好了,说了这么多,来看一个实例吧,我们使用C语言数组来记录小明班同学成绩,然后找到最高的成绩得分:
例子只使用了 6 个成绩做演示,原理是通的,编译并执行上面这段C语言程序,发现找到最高成绩了。
使用C语言数组注意事项
使用数组下标不能超出数组的长度范围,这一点在使用变量做数组下标时尤其要注意。C语言编译器并不检查 score[-1] 或是 score[100] 这样的访问越界错误,编译时能顺利通过,运行时却会出错。
有时候这种错误很隐蔽,发生访问越界时程序可能并不会立即崩溃,而执行到后面某个正确的语句时却有可能突然崩溃。所以,从一开始写代码时就要小心避免出问题,事后依靠调试来解决问题的成本是很高的。
为什么C语言编译器对这么明显的错误都不做处理?
理由一,这种错误并不总是显而易见的,如果题主学了指针,就会发现指针指向数组的什么位置只有运行时才知道,编译时无法检查是否越界,而运行时检查数组访问越界会影响性能,C语言是极其重视效率的编程语言,所以干脆不检查了;
理由二, C99 Rationale 指出,C语言的设计精神是:相信每个C程序员都是高手,不要阻止程序员去干他们需要干的事,高手们使用count[-1]这种技巧其实并不少见,不能当作错误。
欢迎在评论区一起讨论,质疑。文章都是手打原创,每天最浅显的介绍C语言、linux等嵌入式开发,喜欢我的文章就关注一波吧,可以看到最新更新和之前的文章哦。

