【【【如有错误纰漏,敬请批评指正】】】
【运算符】
|| |
或 |
&& |
与 |
! |
否 |
% | 取余数(取模) |
【C语言常用的数据类型】
int | 存放整数 %d | -2147483648~2147483648 |
float |
存放浮点数 %f | ±1.18×10^-38~±3.4×10^38 |
double | 存放极大或极小浮点数 %lf | ±2.23×10^-308~±1.80×10^308 |
char | 存放字符 %c | 256种字符 |
short 短整型 long 长整型 long long 长长整型 | ||
%s 存放字符串 %p 专门用来打印地址 %u 无符号整型 |
【名词解释与问题解决】
局部变量
:在主函数{}
内
的形如 int a = 100;不建议将二者名称取一样
全局变量
: 在主函数{}
外
的形如 int a = 100;二者名称冲突时,局部优先(在整个工程都可使用(可能需要声明))
scanf
函数报错的解决办法和原因:将
#define _CRT_SECURE_NO_WARNINGS 1
放在代码第一行;原因:提示用于替换的scanf_s是VS编译提供的,不是C语言标准规定的,不利于其他编译器;或者直接将scanf_s替换scanf书写,能解一时之急;
作用域:变量生效的作用范围)
局部变量的作用域
:变量所在局部范围
全局变量的作用域
:整个工程(跨文件需要声明变量 extern···)
生命周期:变量的创建和销毁之间的时间段
局部变量的生命周期
:进入局部范围开始,出局部范围结束
全局变量的生命周期
:程序的生命周期
常量
:
字面常量
(3,123,6.6,‘c’,“sadsad”);
const修饰的常变量
(本质上还是变量):具有常属性(不能够改变的属性);
#define定义的标识符常量
(#define MAX 1000;);
枚举常量
(可以一一列举的常量)
字符串
:双引号引起的一串字符称为字符串字面值(简称字符串),字符串的结束标志为 \0 ,仅作为结束标志,不作为内容。
转义字符:转变了这个字符原有的意思(例如“\n”本身表示一个\和一个字母n,但不说明则表示为换行)
\ddd ddd表示三个1~3个8进制的数字 如\130
\xdd dd表示1~2个16进制的数字 如\x26,\x45等等
注释:用来解释复杂代码,方便自己和他人阅读理解所写代码 ,常用//(C++注释风格),少用/* */(C语言注释风格,应为不支持嵌套注释)
函数
数组:一组相同类型的元素的集合
10个整形1~10存起来:
int arr [10] = {1,2,3,4,5,6,7,8,9,10};//其中arr是整形数组的名称,也可叫其他的xxx;[ num ] num代表的是元素的个数,元素个数外加[ ]
存储字母abc:
char ch[5]={'a','b','c'};//本来该输入5个元素,但实际输入了3个,称作不完全初始化,剩余的默认为0,
操作符
算数操作符:+ – * / %(取模,也叫取余数)
移位操作符:>> <<(左移操作符。二进制向左移动一位)
int a = 1 int b = a << 1 printf("%d",b);//这里输出b等于4 //<<表示二进制向左移动一位 //a=1,1的二进制表示为10;一个数有32位,即[00000000000000000000000000000010]; //向左移动一位即 0[0000000000000000000000000000010_(空缺一位)]整体左移,空缺的补上0; //结果为二进制100,即4;
位操作符:
& 按位与 | 按位或 ^ 按位异或
赋值操作符:
= += %=
a=a+4; a+=4;//两种形式表达意思一致,+=位复合赋值符
单目操作符:
!逻辑反操作
int a=1; printf("%d",!a); //C语言规定0为假,非0为真 //输出的是0 定义a=0时,输出1
+ 正值 – 负值 就是你想的哪种正代表正,负代表负; & 取地址操作符
…->…箭头操作符 结构体指针->成员变量名
. 找成员变量操作符
struct Student //创建一个学生的类型 { char name[20]; int age; double score; }; int main() { struct Student s = { "张三",20,85.5 };//结构体的创建和初始化 printf("%s %d %lf\n", s.name, s.age, s.score);//结构体变量 . 成员变量 return 0; }
* 解引用操作符
int main() { int a = 10; int* pa = &a; *pa = 20;// *叫解引用操作符|*pa就是通过pa里面的地址来找到a printf("%d", a);//这里没有通过直接修改a的值 //这里通过找到a的地址,找到a,再间接修改a的取值 return 0; }
sizeof:计算某个变量或者类型的大小
int a=10; printf("%d",sizeof(a));//a左右的括号最好不要删去 //输出结果为4
sizeof 操作数的类型长度
计算一个数组中的元素个数(sizeof简单应用)_DANIEL_DM的博客-CSDN博客
https://blog.csdn.net/chijijixiaozhang/article/details/123955204
~ 按(二进制)位取反
int a=0;// printf("%d",~a);//~表示按照二进制位按位取反, //输出结果为-1
一个整数的二进制表达方式有三种
举例 -1
10000000000000000000000000000001(原码,最前面的1表示为负)
1111111111111111111111111111111111110(反码)
1111111111111111111111111111111111111(补码,反码最后一位加1)
整数在内存中存储的是补码
注意正整数的原码,反码,补码,三码一样;
负整数同举例变化规则
++ — 分为前置++,后置++(–同理)
int a=10; int b=++a;//++a 表示前置++,先++,后使用,++表示原数加1 printf("%d",a);//11 printf("%d",b);//11 int a=10; int b=a++;//a++ 表示后置++,先使用,后++ printf("%d",a);//11 printf("%d",b);//10
(类型) 强制类型转换
int a=3.14; printf("%d",a);//这里编译时会提示,造成精度下降 int a=(int)3.14; printf("%d",a);//这样进行类型强制转换,下方不会提示
关系操作符 > < >= <= == !=
逻辑操作符 && 逻辑与 || 逻辑或
条件操作符(三目操作符)
exp1? exp2:exp3意思为 如果exp1成立的话,exp2计算,整个表达式的结果是exp2的结果;
如果exp1不成立的话,exp3计算,整个表达式的结果是exp3的结果;
int a=1;b=3 int max=0; max=a>b?a:b;//if (a>b) max = a;else max = b;
逗号表达式 exp1,exp2,exp3,…,expn
int a = 0; b = 3; c = 5; int d=(a=b+2,c=a-4,b=c+2);//逗号表达式是从左到右依次计算 //整个表达式的结果,是最后一个表达式的结果 printf("%d",d);//d==3
[ ] 下标引用操作符 ( )函数调用操作符
常见关键字
auto(通常在局部变量前省略,自动创建,自动销毁;新C语言语法有其他用法暂不考虑) break(停止) case char const continue default(默认) do double else enum(枚举) extern(声明外部符号) float for goto if int long register(寄存器关键字,大量频繁使用的数据可放在寄存器中,提升效率) return short signed(有符号的) sizeof static struct(创建结构体操作符) switch typedef union(联合体/共用体) unsigned void(无/空) volatile(C语言中暂时不讲) while
define include 不属于关键字,是预处理命令
typedef 类型重定义
typedef int iit;//这里的typedef相当于将int重命名一下,下面输入iit和int效果一样 int main() { int num=100; return 0; }
static(静态的) 修饰变量和函数
1 static修饰局部变量
【static修饰局部变量】简单说明_DANIEL_DM的博客-CSDN博客
p22 12:542 static修饰全局变量
【static修饰全局变量】简单说明_DANIEL_DM的博客-CSDN博客
3 static修饰函数(同上)
#define定义常量和宏
define是一个预处理指令
1.define定义常量
#define MAX=100//define定义常量,这里定义标志符MAX=100 int main() { printf("%d".MAX);//直接打印出100 return 0; }
2.define定义宏
//代码1 #define ADD(X,Y) ((X)+(Y))//括号里面套括号,说明是一个整体 int main() { printf("%d",4*ADD(2,3));//打印出20,4*(2+3) return 0; } //代码2 #define ADD(X,Y) X+Y//没有括号 int mian() { printf("%d",4*ADD(2,3));//计算时为4*2+3=11 return 0; }
指针:指针就是内存单元的地址
了解指针前,先了解一下指针
内存
内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。
所以为了有效的使用内存,就把内存划分成一个个小的内存单元,
每个内存单元的大小是1个字节(byte) (1字节=8bit )
。为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该
内存单元的地址
。
内存是怎么编号的?
32位–32个地址线–物理线–通电–1/0
电信号转换为数字信号 1和0组成的二进制序列
00000000000000000000000000000000
…
01111111 11111111 111111111 1111111
10000000000000000000000000000000
…
11111111 11111111 11111111 11111111//用二进制序列来编号
指针变量 用来存放地址的变量
int main() { int a = 10;//a在内存中分配的空间为4个字节 printf("%p", &a);//%p是专门用来打印地址的 int * pa = &a;//pa是用来存放地址的,在C语言中pa叫作指针变量 // * 说明pa是指针变量 // int 说明pa执行的对象是int类型的 return 0; }
指针的大小
指针的大小都是一样的–指针是用来储存地址的,指针需要多大空间,取决于地址的存储需要多大空间
32位 32bit 4byte
64位 64bit 8byte
指针大小在32(x86)位平台是4个字节,在64(x64)位平台是8个字节
结构体:使得C语言有能力描述复杂类型;创建出新的类型出来
结构体简单说明(struct 和.操作符举例)_DANIEL_DM的博客-CSDN博客
https://blog.csdn.net/chijijixiaozhang/article/details/124098675
//本章完//
【更新日志】
2022年4月11日
简单说明结构体,增加对 . -> 操作符的说明
2022年4月10日
简单说明 #define定义常量和宏 和 指针变量 指针大小 内存简单说明
2022年4月4日
解释 数组 操作符
2022年4月3日
解释“转义字符” “注释”
2022年4月2日
解释了“作用域” “生命周期” 常量的几种类型
发现还有【块引用】功能,牛啊,文本看起来更加又秩序
2022年4月1日
更新数据类型short long等;
添加名词解释与问题解决栏目,解释了“局部变量”“全局变量”,说明了scanf函数报错
2022年3月30日
更新运算符及其表格
2022年6月28日
更新了一些正确的错误