01_c语言的基本语法

知识点1【数据类型】
数据的不同类型 目的 合理的利用空间
计算机存储的是二进制。一位二进制 只能存放0或1 1b
1字节 == 8b(八位二进制) 0000 0000 ~ 1111 1111
1B == 8b
1KB == 1024B 10月24号程序员节日
1MB == 1024 KB
1GB == 1024 MB
1TB == 1024 GB
1PB == 1024 TB
1EB == 1024 PB
-------------------------在32位平台---------------------------------
char 字符类型 占1字节的空间(8位二进制位)
short 短整型 占2字节的空间(16位二进制位)
int 整型 占4字节的空间(32位二进制位)
long 长整型 占4字节的空间(32位二进制位)
float 单精度浮点型 占4字节的空间(32位二进制位)
double 双精度浮点型 占8字节的空间(64位二进制位)
案例:验证数据类型的长度
-------------------------在64位平台---------------------------------
char 字符类型 占1字节的空间(8位二进制位)
short 短整型 占2字节的空间(16位二进制位)
int 整型 占4字节的空间(32位二进制位)
long 长整型 占8字节的空间(64位二进制位)
float 单精度浮点型 占4字节的空间(32位二进制位)
double 双精度浮点型 占8字节的空间(64位二进制位)
案例:验证数据类型的长度
sizeof测量类型的长度

#include<stdio.h>

int main(int argc,char *argv[])

{

	printf("sizeof(char)=%d\n",sizeof(char));

	printf("sizeof(short)=%d\n",sizeof(short));

	printf("sizeof(int)=%d\n",sizeof(int));

	printf("sizeof(long)=%d\n",sizeof(long));

	printf("sizeof(float)=%d\n",sizeof(float));

	printf("sizeof(double)=%d\n",sizeof(double));

	return 0;

}

运行结果:
在这里插入图片描述知识点2【unsigned 和 signed】(重要)
1、无符号数 unsigned
数据没有符号位,自身的所有二进制位 都是数据位
比如:unsigned char 0000 0000 ~ 1111 1111
2、有符号数 signed 默认一般省略
二进制最高位 为符号位,其他位 为数据位。
signed char xxxx xxxx (x:0~1)
最高位为1表示负数 最高位为0 表示正数
负数:1xxx xxxx 正数:0xxx xxxx
signed char 他的表示范围:1111 1111~1000 0000 ~0000 0000 ~ 0111 1111
案例:一个字节:-10 == 1000 1010
案例:

#include<stdio.h>

int main(int argc,char *argv)

{

	//定义一个有符号int

	signed int num1 = 10;//num1有符号int


	//signed 默认是省略(推荐)

	int num2 = 10;//num2也是有符号int


	//unsigned 表示无符号数 不能省略

	unsigned int num3 = 10;


	return 0;

}

知识点3【结构体 struct和共用体union】
1、struct 结构体 中的成员 拥有独立的空间

struct data1{

    char a;

    short b;

    int c;

};

a b  c就是结构体data1中的成员

在这里插入图片描述2、union 共用体 中的成员 共享同一份空间

union data2{

    char a;

    short b;

    int c;

};

在这里插入图片描述知识点4【enum 和 void】(了解)
1、enum 枚举 将变量要赋值的值 一一列举出来
enum BOOL{false,true};
enum BOOL bool = false;
2、void 无类型 (重要)
不能用void 定义变量
int num;//√
void num;//× 系统不能确定给num开辟多大的空间
知识点5【其他关键字】(了解)
auto自动类型,register 寄存器变量,static静态变量,const只读
sizeof 测类型大小
typedef为已有的类型 重新取个别名
volatile 防止编译器优化

1、register 寄存器变量
在这里插入图片描述总结:
1、如果没显示标明 register ,就类似int num,如果num被高频繁使用 系统也会放入寄存器中
2、register int num;//显示的将num放入寄存器中
3、寄存器的变量 不能取地址 &num

#include<stdio.h>

int main(int argc,char *argv[])

{

	register int num = 10;

	//%p输出地址

	printf("%p\n",&num);//错误 不能对寄存器变量取地址


	return 0;

}

2、typedef 为已有的类型取个别名

//给已有的int类型取个别名 INT32

typedef int INT32;

void test02()

{

	int num1 = 10;

	INT32 num2 = 20;

	printf("num1 = %d\n",num1);

	printf("num2 = %d\n",num2);

}

int main(int argc,char *argv[])

{

	test02();


	return 0;

}

结果:
在这里插入图片描述3、volatile 防止编译器优化 强制访问内存操作
在这里插入图片描述知识点6【常量与变量】(重要)
1、常量 值不能被修改 (千万不能反过来说:值不能修改就是常量)
10 20 4.14 ‘a’ “abcd”
2、变量 系统根据变量的类型 开辟对应的空间 其值可以被修改
变量名 代表的是 空间的内容 (重要)
操作变量 就是 对空间内容的操作

变量名的命名规则:由数值、字母、下划线组成但不能以数字开头。
A: num_1 B: _num1 C: 1_num D: num
在这里插入图片描述知识点7【八进制 十进制 十六进制】
十进制:0~9
八进制:0~7
十六进制:0~9 a~f
八进制 十进制 十六进制 都是整型的输出形式。
不同进制 仅仅是数据的表现形式 不会修改数据本身(重要)

void test03()

{

	int num = 100;


	//十进制 输出 %d %u %ld  %lu

	printf("十进制:num=%d\n", num);//100

	//八进制 输出 %o   以0开头

	printf("八进制:num=%#o\n", num);//0144

	//十六进制 输出 %x  以0x开头

	printf("十六进制:num=%#x\n", num);//0x64


	//不同进制 仅仅是数据的表现形式 不会修改数据本身

}

int main(int argc,char *argv[])

{

	test03();


	return 0;

}

运行结果:
在这里插入图片描述知识点9【整型变量的操作-读、写】取值、赋值

void test04()

{

	//局部变量不初始化 内容随机

	//int num;

	int data = 0;

	int num = 0;

	printf("num = %d\n",num);//读  取值


	num = 100;//写  赋值

	printf("num = %d\n",num);


	data = num;//num读  data写

	printf("data = %d\n",data);


	//获取键盘输入

	printf("请输入一个int数据:");

	scanf("%d", &data);//&data 代表是data对应空间的起始地址

	printf("data = %d\n",data);


}

运行结果:
在这里插入图片描述2、整形的输出形式

void test05()

{

	int num1 = 0;

	//%d 有符号int数据输出 

	printf("num1 = %d\n", num1);


	unsigned int num2 = 0;

	//%u 无符号int数据输出

	printf("num2 = %u\n", num2);


	long num3 = 0;

	//%ld 有符号long数据输出

	printf("num3 = %ld\n", num3);


	unsigned long num4 = 0;

	//%lu 有符号long数据输出

	printf("num4 = %lu\n", num4);


	short num5 = 0;

	//%hd 有符号short数据 输出

	printf("num5 = %hd\n",num5);

	

	unsigned short num6 = 0;

	//%hu 无符号short数据 输出

	printf("num6 = %hu\n",num6);

}

unsigned short num6=0;
scanf("%hu",&num6);//输入
知识点10【实型 常量】

void test06()

{

	//赋值语句 = 两边的类型 尽量保证一致

	float f = 3.14f;//有没有问题

	double d = 3.14;


	//不以f结尾的 实型常量 为double类型

	printf("sizeof(3.14) =%d\n",sizeof(3.14));//8


	//以f结尾的 实型常量 为float类型

	printf("sizeof(3.14f) =%d\n",sizeof(3.14f));//4


	//%f 输出 float数据

	printf("f = %f\n",f);

	

	//%lf 输出 double数据

	printf("d = %lf\n", d);

	

	scanf("%f", &f);

	scanf("%lf", &d);

}

知识点11【字符常量和变量】(重要)
1、字符常量 char

void test07()

{

	//%c 输出的字符

	//printf("%c\n",'a');


	//字符变量

	//ch 存储的是 ‘a’的ASCII值

	char ch = 'a';

	printf("ch = %c\n",ch);

	//%d 输出的字符的ASCII值

	printf("ch = %d\n",ch);


	//'a' 单引号 表示的取 字符的ASCII

	//'a' == 97是完全等价

	ch = 97;

	printf("ch = %c\n",ch);

	//%d 输出的字符的ASCII值

	printf("ch = %d\n",ch);


	ch = ch+1;

	printf("ch = %c\n",ch);

	//%d 输出的字符的ASCII值

	printf("ch = %d\n",ch);


}

int main(int argc,char *argv[])

{

	test07();


	return 0;

}

总结:
1、‘a’ 单引号 表示取a的ASCII值
2、字符在计算机及存储的是ASCII
3、‘a’ ==97

void test08()

{

	char ch = 'a';

	printf("%d\n",sizeof('a'));//4字节

	printf("%d\n",sizeof(char));//1 字节 为啥?

}

int main(int argc,char *argv[])

{

	test08();


	return 0;

}

字符获取键盘输入:

void test09()

{

	char ch;

	printf("请输入一个字符:");

	//scanf中%c只能提取一个字符

	//scanf("%c", &ch);

	ch = getchar();//获取一个字符


	printf("ch = %c\n",ch);

	printf("ch = %d\n",ch);

}

int main(int argc,char *argv[])

{

	test09();


	return 0;

}

运行结果:
在这里插入图片描述
案例:提高 键盘输入 “abc” 只取 'a’和‘c’

void test09()

{

	char ch1,ch2;

	printf("请输入abc:");

	

	//提取a

	ch1 = getchar();

	getchar();//丢弃一个字符

	ch2 = getchar();

	

	printf("ch1 = %c\n", ch1);

	printf("ch2 = %c\n", ch2);

}

int main(int argc,char *argv[])

{

	test09();


	return 0;

}

运行结果:
在这里插入图片描述知识点12【转义字符】

void test10()

{

	// '\n' 换行  '\t' tab

	//printf("##%c##\n", '\\');//两\\输出一个\

	printf("##%%##\n");


	char ch = '\0';

	printf("A:%d\n", '0');//48

	printf("B:%d\n", '\0');//0

	printf("C:%d\n", 0);//0

	printf("D:%d\n", "0");//字符‘0’地址


}

int main(int argc,char *argv[])

{

	test10();


	return 0;

}

知识点13【字符串】"" 双引号作用

void test11()

{

	//%s 就是输出字符串

	//''取的是字符的ASCII值 ""取的是字符串的首元素的地址

	//%s 从字符串的首元素 逐个字符输出 遇到'\0' (重要)

	printf("%s\n", "hello");

	//系统会在字符串末尾自动添加一个结束字符'\0'

	printf("%d\n",sizeof("hello"));


	printf("%s\n","hello world");

	printf("%s\n","hello\0world");

	printf("##%s##\n","\0hello\0world");

}

int main(int argc,char *argv[])

{

	test11();


	return 0;

}

运行结果:
在这里插入图片描述请描述:‘a’ 和 "a"的区别?
在这里插入图片描述知识点14【输出的格式回顾】(了解)

void test12()

{

	printf("##############\n");

	//%5d 表示占5个终端位宽 右对齐

	printf("##%5d##\n",123);

	

	//%-5d 表示占5个终端位宽 左对齐

	printf("##%-5d##\n",123);


	//%05d 表示占5个终端位宽 右对齐 不足补0

	printf("##%05d##\n",123);


	//千万不能写 %-05d

	//printf("##%-05d##\n",123);


	//%5.2f  5表示总位宽为5  .2表示小数位保留2位

	printf("##%5.2f##\n", 3.14159f);

	

}

int main(int argc,char *argv[])

{

	test12();


	return 0;

}

运行结果:
在这里插入图片描述知识点15【typedef】
为已有的类型重新 取个别名。
1、用已有的类型 定义 一个变量
2、用别名 替换 变量名
3、在整个表达式的前方加上 typedef.
案例1:

int INT32

typedef int INT32;

案例2:给int arr[5] 取个别名 ARR

typedef int ARR[5];

ARR arr;//arr就是一个拥有5个int元素的数组

发布了20 篇原创文章 · 获赞 0 · 访问量 20

猜你喜欢

转载自blog.csdn.net/weixin_45992045/article/details/104669561
今日推荐