C语言知识点(重难点)(基础)(详解)

这篇博客详细介绍了C语言的基础知识,包括存储单位换算、数据类型、数组、结构体、共用体、关系运算符、循环结构、递归、格式输入输出以及文件操作。还讲解了指针、链表、冒泡排序等概念,提供了相关示例代码,适合初学者深入理解C语言。
摘要由CSDN通过智能技术生成

1.存储的换算
1Byte=8bit 一个字节BYTE=8位bit
1KB=1024Byte=210Byte
1MB = 1024KB = 220Byte
1GB = 1024MB = 230Byte
1TB = 1024GB = 240Byte
1PB = 1024TB = 250Byte
1EB = 1024PB = 260Byte

数值是以补码表示的
正数的补码与原码相同
负数的补码:将该数的绝对值的二进制形式按位取反在加1

10的原码:00001010
取反:11110101
再加1,得-10的补码:11110110

说 明 字符型 短整型 整型 长整型 单精度浮点型 双精度浮点型
数据类型 char short int long float double

指针固定占4个字节
获取某个数据类型的长度可以使用 sizeof 操作符
2.数组
同一个数组数据类型相同;下标从零开始A[0]/A[1]…
如果要数千亿有10个变量的数组必须用循环语句逐个输出各下标变量
for(i=0;i<10;i++)
{
printf("%d",a[i];
}
二维数组
a[3][4];
a[0]--------a00 a01 a02 a03
a[1]--------a10 a11 a12 a13
a[2]--------a20 a21 a22 a23
int a[3][4]={ {1,2,3,4},{5,6,7,8},{9,10,11,12}};
3.结构体
基本形式
struct 结构体名
{
结构体所包含的变量或数组
};

struct stu{
char *name;//姓名
int num;//学号
int age;//年龄
char group;//所在学习小组
float score;//成绩
};

结构体变量
struct stu stu1,stu2;
定义了两个变量stu1,stu2都是stu类型,都由5个成员组成

也可以
struct stu{
char *name; //姓名
int num; //学号
int age; //年龄
char group; //所在学习小组
float score; //成绩
} stu1, stu2;

首先在C中定义一个结构体类型要用
typedef struct Student
{
int a;
}Stu;
于是在声明变量的时候就可:Stu stu1;
如果没有typedef就必须用struct Student stu1;来声明。
这里的Stu实际上就是struct Student的别名。

赋值方法
//给结构体成员赋值
stu1.name = “Tom”;
stu1.num = 12;
stu1.age = 18;
stu1.group = ‘A’;
stu1.score = 136.5;
//读取结构体成员的值
printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.1f!\n", stu1.name, stu1.num, stu1.age, stu1.group, stu1.score);
return 0;
}
另外的方法
//结构体指针
struct stu *pstu = &stu1;

注意,结构体变量名和数组名不同,数组名在表达式中会被转换为数组指针,而结构体变量名不会,无论在任何表达式中它表示的都是整个集合本身,要想取得结构体变量的地址,必须在前面加&,所以给 pstu 赋值只能写作:
struct stu *pstu = &stu1;

*pointer = &stu1;
获取结构体成员
pointer->memberName
指针->所取成员

(*pointer).memberName
*指针.取成员

4.共用体
union 共用体名
{
成员列表
};
结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。
结构体占用的内存大于等于所有成员占用的内存的总和(成员之间可能会存在缝隙),共用体占用的内存等于最长的成员占用的内存。共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。

#include <stdio.h>
union data{
int n;
char ch;
short m;
};
int main(){
union data a;
printf("%d, %d\n", sizeof(a), sizeof(union data) );
a.n = 0x40;
printf("%X, %c, %hX\n", a.n, a.ch, a.m);
a.ch = ‘9’;
printf("%X, %c, %hX\n", a.n, a.ch, a.m);
a.m = 0x2059;
printf("%X, %c, %hX\n", a.n, a.ch, a.m);
a.n = 0x3E25AD54;
printf("%X, %c, %hX\n", a.n, a.ch, a.m);

return 0;

}
%x是十六进制输出 %c是按字符型输出 %hx是以16进制的 输出short类型的整数
运行结果
4, 4
40, @, 40
39, 9, 39
2059, Y, 2059
3E25AD54, T, AD54

你会发现改变一个数的值其他数的值也跟着改变了全部变为40、‘9’、2059等

5.关系运算符
关系运算符 含 义

< 小于 <= 小于等于 > 大于 >= 大于等于
== 等于 != 不等于

1)与运算(&&)
参与运算的两个表达式都为真时,结果才为真,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浮生〆随风 、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值