C: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测量类型的长度(32位平台)

#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

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、变量 系统根据变量的类型 开辟对应的空间 其值可以被修改

变量名 代表的是 空间的内容 (重要)
操作变量 就是 对空间内容的操作
变量名的命名规则:由数值、字母、下划线组成但不能以数字开头

知识点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);

}

整形的输出形式

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);
}

知识点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.

案例1int  INT32
typedef int INT32;

案例2:给int arr[5] 取个别名 ARR
typedef int ARR[5];
ARR  arr;//arr就是一个拥有5个int元素的数组
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值