C语言第四次课(结构体,文件,关键字,bool型)

本文介绍了C语言中的结构体定义与使用,包括如何初始化结构体变量并访问其成员。讲解了文件操作的基本原理,包括读写过程,并区分了文本文件和二进制文件。同时,详细阐述了C语言的关键字`sizeof`的用法,以及在不同情况下的字节数计算。此外,还讨论了`bool`类型的使用以及真假值的表示。最后,提到了静态关键字`static`的作用,以及其在函数局部变量中的应用。
摘要由CSDN通过智能技术生成

C语言第四次课重点(结构体,文件,关键字,bool型)

(1)回顾指针大小:指针的大小在x86下只能是4字节即32b,在x64下为8字节即64b。因为指针存放的是首地址。

(2)结构体 struct:设计出新的类型,由程序开发者自己设计。

struct student
{
};//需要加分号
struct student
{
   char s_id[10];
   char s_name[10];
   char s_sex[5];
   char s_age;
 }
 int main()
 {
    int a = 10;
    struct student s1={"09001","yhping","man",23};//对结构体进行初始化,用花括号{}
    printf("id:%s \n",s1.s_id);//s1为结构体变量 用 . 来进行访问
    printf("name:%s \n",s1.s_name);//%s来打印字符串
    printf("sex:%s \n",s1.s_sex);
    printf("age:%n \n",s1.s_age);
    return =0;
 }

以下两种写法等价,用指针来访问:

struct student*sp=&s1;
//sp=&s1;
//*sp=s1;
printf("id: \n,"(*sp).s_id);//. 的优先级高于 * 所以必须括号(*sp)
printf("id: \n,"sp->s_id);//两者等价 第二种->指向符更简便

(3)文件
//读文件:“磁盘”——将文件数据复制到“缓冲区”——读缓冲区的数据到“程序”
//写文件: “程序”——把数据写到“缓冲区”——将缓冲区数据写到“磁盘”文件。
//因为内存存取速度比磁盘快得多。
//文件分为:文本文件(转为对应ASCII码值)和二进制文件(不进行转换直接用)。

#include <stdio,h>
int main()
{
   int a = 0, b = 0;
   scanf_s("%d,%d",&a,&b);//stdin 从std缓冲区提取数据 格式和scanf_s内格式相同
   printf("a=%d b=%d \n",a,b);//stdout
   return 0;
}
 //stdin--buffer--stdout

输入12,23(scanf_s内格式为逗号分隔)
输出a=12 b=23

(4)关键字
在这里插入图片描述
size of(用来计算字节个数)不是宏也不是函数,是关键字。

#include <stdio,h>
int main()
{
   int a = 10;
   int size=sizeof(++a);//int size=4 仍打印整型字节,不解析表达式++a
   printf("size:%d \n",size);//4
   printf("a=%d,\n",a);
   return 0;
}

size=4
a=10

#include <stdio,h>
int main()
{
   int a = 10;
   int size=sizeof(a+10.0);//变为double型 int size=8
   printf("size:%d \n",size);//4
   printf("a=%d,\n",a);
   return 0;
}

10
010
0x10
0b1010:均为整型 size=4
12.23:double型 size=8;

#include<stdio.h>
#include<string.h>
int main()
{
   char str[]={"yhping"};//字符串必须以\0结尾并且占一个空间
   int size = sizeof(str);//type+num
   int len = strlen(str);
   printf("size:%d \n",size);//6+1=7算\0
   printf("len:%d \n",len);//6 数组长度不算\0
   return 0;
}

typedef 把合法的变量定义转化为别的类型声明。

unsigned char u_int8;//变量名
typedef unsigned char u_int8;//从变量名转化为类型名

数组所申请的空间大小是他的数组类型所占字节与数组的数据个数所占的乘积。

int short[10];//输出为2 * 10=20

static静态关键字(延长其寿命从.stack区移到.data区)
修饰 全局变量 局部变量 和 函数。

void fun(int x)
{
   int a = 0;//函数结束后 a为局部变量 归还栈帧 a在.stack区
   static int b = 0;//寿命延长 只做一次初始化 累加1  b在.data区
   a +=1;//++a
   b +=1;//++b
   printf("a = %d,b= %d,\n",a,b);
   }
   int main()
   {
   for(int i=10;i > 0;i--)
   {
      fun(i);
   }
   return 0;
   }
      

运行后a=1后面不变,静态关键字static延长其寿命 b=1 b=2一直到10。

(5)bool类型
//bool只有true和false,c语言中只有0是flase(假),非0都是true(真)。
//引入头文件#<stdbool,h>,在 . cpp文件中直接使用。
//bool占一个字节0000 0000假 0000 0001真。

int main()
{
   char cha = '0';//字符0的ASCII值为48 true 即bool值为0000 0001
   char chb = '\0';//空字符 0 flase bool:0000 0000
   char chc = 0;//0 flase
   int *p = NULL;//空指针宏定义为0 flase
   return 0;
}
int main()
{
   bool x = 1;//true
   x -= 1;//flase只有0为假 非0都是真
   x -= 1;//true
   x -= 1//true
   return 0;
}

关系表达式:运算结果为bool值

在这里插入图片描述
优先级:
在这里插入图片描述

//x大于等于10 且小于等于20 可写为:x>=10&&x<=20;不可把数学概念放入c语言概念,数学有无穷概念而c语言每个变量有范围,不要把数学表达式当c语言的表达式。
//如 5/2=2 整型/整型=整型;5/2.0=2.5 整型/浮点数=浮点数。
//算数优先级高于比较优先级即a+b>c为 先a+b再大于c。

逻辑表达式:运行结果为bool值

在这里插入图片描述

int main()
{
   int a = 10;
   bool x = flase;
   x = !!a;
   printf("%d,\n",x);//1 a为真 !a假 !!a为真 x为1
   printf("%d,\n",a);//10 a的值不被影响 仍为10
   return 0;
}
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值