C程序设计(第五版) |
您所在的位置:网站首页 › windows程序设计pdf第七版 › C程序设计(第五版) |
文章目录
前言第2章 运算符与表达式以及运算优先级赋值算术关系逻辑逗号条件
第3章 顺序程序设计第4章 选择结构程序设计c逻辑运算
第5章 循环程序设计第6章 利用数组处理批量数据第7章 用函数实现模块化程序设计第8章 善于利用指针第9章 用户建立数据类型结构体字节对齐
第10章 对文件的输入输出1、问题:结构数组student中的元素都已有值,若要将这些元素写入到硬盘文件fp中,应该怎么写入,有多少种方式?
前言
鉴于写CSDN博客一篇一篇查找比较麻烦,所以特此把这些按照分类别成一个目录,后面把这些问题、知识点写到相关目录的下面,根据目录查找,复习,这个C语言系列就写到这篇上面了。后面如果写得太多,一篇博客写不完就把链接放到下面查找。 第2章 运算符与表达式以及运算优先级 赋值 算术 关系 逻辑 逗号 条件 #include int main(int argc, char **argv) { int a = 1,b=4,c=3,d=2,e; e=a int a=4,b=5,c=0,d; d = !a && !b||!c; printf("%d\n",d); } //为什么是1?不是0?这里会我们会错误地认为&&左边为0,&&后面的就不算了,所以会误以为d为0. 因为在表达式!a && !b||!c中,&& 的优先级高于 ||,所以实际上这个表达式相当于 (!a && !b) || !c。而因为 a 和 b 都是非零值,所以 !a && !b 的结果为 0,而 !c 结果也为1。最后,0 或 1 的结果总是1,因此 d 的值为1。(*p).data.a:这个表达式尝试使用 (*p) 运算符先解引用指针 p,然后再使用成员访问运算符 . 访问 data 字段,最后使用 .a 访问结构体 data 中的成员 a。然而,data 结构体本身并没有名为 data 的字段,因此这个表达式是错误的。 (*p).a:这个表达式也使用 (*p) 运算符先解引用指针 p,然后使用成员访问运算符 . 访问 a 字段。这是正确的方法之一,用于访问结构体 data 中的成员 a。 p->data.a:这个表达式使用箭头运算符 -> 直接从指针 p 中访问结构体 data 中的成员 a。箭头运算符会自动进行指针解引用和成员访问操作。因此,这也是正确的方法之一,用于访问结构体 data 中的成员 a。 p.data.a:这个表达式是错误的。因为 p 是一个指针,使用点运算符 . 来访问结构体成员需要对指针进行解引用。这里应改为 (*p).a 或 p->a 来访问结构体 data 中的成员 a。 正确的两种方法是 (*p).a 和 p->a。这两个表达式都能正确访问结构体 data 中的成员 a。 字节对齐点击跳转详见博主棉花糖超人【C上分之路】第八篇:结构体声明定义、结构体数组以及字节对齐 1、按一个字节对齐; 2、按编译器默认进行对齐; 3、字节对齐规则: (1)结构体内部任何K字节的基本对象相对于结构体首地址的偏移,必须是K的整数倍 (2)结构体变量的首地址能够被其最宽基本类型成员的大小所整除 (3)结构体的总大小为结构体最宽基本类型成员大小的整数倍 struct stu{ union{ char a[5]; int b[2]; }_class; char c[8]; float d; }lk; 若int为2字节,char 1 float 4 ,Find sizeof(lk)?根据结构体内存对齐的规则,对于这个结构体的大小 sizeof(struct stu) 的计算如下: char a[5] 占用 5 个字节。 int b[2] 占用 2 个 int类型大小的字节,因为 int 在题中定义为 2 个字节大小,所以 int b[2] 总共占用 4 个字节。 char c[8] 占用 8 个字节。 float d 占用 4 个字节。 所以,这个结构体的总大小为 5 + 4 + 8 + 4 = 21 个字节,即 sizeof(struct stu) 的值为 21 第10章 对文件的输入输出结构体指针获取结构体成员 通过结构体指针获取结构体成员的方式 1、(*ptr).structMember 2、ptr->structMember .运算符高于*,所以(*ptr)括号不能少 1、问题:结构数组student中的元素都已有值,若要将这些元素写入到硬盘文件fp中,应该怎么写入,有多少种方式? struct st{ char name[8]; int num; float s[4]; }student[50]; 1、fwrite(student, sizeof(struct st), 50, fp);//√ 2、fwrite(student, 50 * sizeof(struct st), 1, fp);//√ 3、fwrite(student, 25 * sizeof(struct st), 25, fp);//x //写入的数据超过实际的数组数据,可能造成文件大小不正确或写入了无效的数据,正确写法应为把第三个参数修改为2. 4、for (i = 0; i fwrite(&student[i], sizeof(struct st), 1, fp); // 逐个写入结构体 } fclose(fp); // 关闭文件该方法通过循环逐个写入结构体数组 student 中的每个元素,每个元素的大小为 sizeof(struct st),写入的数据个数为 1。 方法2: 批量写入所有结构体 FILE *fp = fopen("filename.txt", "wb"); // 打开文件 fwrite(student, sizeof(struct st), 50, fp); // 批量写入所有结构体 fclose(fp); // 关闭文件该方法通过一次性写入整个结构体数组 student 到文件中,每个元素的大小为 sizeof(struct st),写入的数据个数为 50。 方法3: 通过指针进行写入 FILE *fp = fopen("filename.txt", "wb"); // 打开文件 // 将指针指向结构体数组的第一个元素,然后写入整个结构体数组 fwrite(student, sizeof(struct st), 25, fp); fclose(fp); // 关闭文件该方法利用指针将结构体数组 student 的前 25 个元素作为整体进行写入,每个元素的大小为 sizeof(struct st),写入的数据个数为 25。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |