注:因为系统会自动追加字符结束符\0 一同存储,因此VS中的安全函数scanf_s最大写入为9.
注:c中字符串之间不能直接赋值,但是结构类型的数据是可以直接赋值的。
#include <stdio.h> //给printf用
#include <stdlib.h> //给system用
#define PI 3.1415926 /*宏定义是预处理命令,不是语句,因此结尾不用分号。
宏定义一般用在一个常量反复出现在程序中时,宏定义好处:
1、方便修改维护,如果需要修改此常量,仅需修改宏即可。
2、增加程序的可读性
注意:它仅仅就是替换,不做任何计算等。
const常量有类似功能,但是const常量有数据类型。
*/
int main1()
{
char a = 'A', b = 'D',c;/*单引号引起的代表此字符的Asiic码对应数值,
A = 65,D= 68, ? = 133 */
c = a + b;
printf("%c\n",c); //%c代表单个字符
system("pause");
return 0;
}
int main2()
{
char a = 'A', b = 'D', c;/*单引号引的代表此字符的Asiic码对应数值,
A = 65,D= 68, ? = 133 */
c = a + b;
printf("%c\n", c); //%c代表单个字符
system("pause");
return 0;
}
/*
c语言中的数据类型 关键字 长度 位数 范围
字符型: char 1Byte = 8bit -128—127
整数: int 4Byte = 32bit -2^31—2^31-1
浮点型 float 4Byte = 32bit _+(10^-38—10^38) 显然一般的数用float单精度足够
双精度 double 8Byte = 64bit _+(10^-380—10^380) 99.9999%的可能你不需要用它!
unsigned 指的是将第一位的符号位也视为数值位,即没有负数区间,但正数区间增大一倍。
signed就很显然了,第一位符号位,区间上限比unsigned变小一半。
*/
/*
为什么1Byte = 8位?
这个要从美国人的所有符号说起,ASIIC码中,英文中所有符号、数字加起来不超过128,也就是7位,加上符号位8位就够了。因此用了8位。
但是汉字8万多,显然不行,因此有了其他编码如utf-8
网速说的10M是通信中的概念,单位实际是Mbit/s
因此10Mbit/s = 10/8 MByte/s = 12.5M/s
*/
/*
数据类型:十进制 八进制(0开头) 十六进制(0x开头)
65 0 101 0x 41
3255U (无符号类型 十进制)
0x41U (无符号类型 十六进制)
3.12e-2 用 e 表示 10^
字符常量:指用一个单引号引起来的一个字符。字符常量本质上就是十进制数。
字符串常量:。。。。。。双引号。。。。。
存储字符串时,系统会识别引号结束符,然后自动给其结尾加上 NUll串结束标识符
如"china"实际存储时是用6个字节; c h i n a NULL
对应Asiic码中的存储形式为: 67 104 105 112 97 \0
转义符:双引号 反斜杠已经有具体意义了,双引号代表字符的开始和结束。
要打单引号:\'
要打双引号:\"
要打反斜杠:\\
因为存储的最小单位是字节,因此画的存储分配内存示意图中最小的矩形框代表1个字节
变量的实质是一块内存空间
如x = 25
y = x-- ;后置运算符减号表示,先赋值给y,再把x减少1。 y = 25
y = --x ;前置运算符减号表示,先把x减少1,再赋值给y。 y = 24
类型强制转换: eg: int x = 10;
float y;
y = x ;(会警告!)
改动: y = (float)x; 安全!
*/