常量const 常属性
#include<stdio.h>
int main()
{
//const常属性
//const常量的属性,变量num前面加了const之后就不能变了 const修饰的常量变量
//这里的num还是变量只是具有了常量的属性
//中国人拿到了美国国籍,但是本质上还是中国人
const int num = 5;
printf("%d\n",num);
num = 8;
printf("%d\n",num);
return 0;
标识符常量
#include<stdio.h>
#define MAX 10
//define定义的标识符常量
int main()
{
int arr[MAX] = {
0 };
//标识符define 定义的常量可以存放在数组里
printf("%d\n", MAX);
return 0;
枚举常量
//枚举常量
//枚举一一列举出来就是枚举
//性别-男,女,其他
//三原色-红,黄,蓝
//星期1,2,3,4,5,6,7
//枚举关键字--enum
#include<stdio.h>
enum Sex //Sex性别
{
MALE, //男
FEMALE,//女
SECRET //其他
};
//MALE , FEMALE ,SECRET 这些就是枚举常量
//这些枚举常量是有值的,而且不能改变,
int main()
{
enum Sex s = MALE;//枚举的用法
printf("%d\n",MALE); //打印值是0
printf("%d\n",FEMALE);//打印值是1
printf("%d\n",SECRET);//打印值是2
return 0;
}
#include<stdio.h>
enum Color
{
RED,
YELLOW,
BLUE
};
int main()
{
enum Color color = BLUE;//枚举的用法
return 0;
}
字符串 转义字符\0
#include<stdio.h>
int main()
{
char arr1[] = "abc";//数组
// "abc" -- 'a' 'b' 'c' '\0' --
//'\0'是字符串的结束标志,
// \0的值是0所以这里用0或'\0'都可以
//"abc"里面有一个隐藏的\0
char arr2[] = {
'a', 'b', 'c' ,'\0'};
//'a' 'b' 'c' 数组里面需要自己加上一个\0(字符串的结束标志)
//数组里面没有隐藏的的\0
printf("%s\n", arr1);
printf("%s\n", arr2);
//注意:字符串的结束标志是一个\0的转义字符,在计算字符串长度的时候\0这是结束标志,不能算字符串的内容
return 0;
}
计算字符串长度 strlen
strlen 就是string -length
#include<stdio.h>
#include<string.h> 用来strlen就必须要用这个头文件
int main()
{
char arr1[] = "abc";
//"abc后面会有一个隐藏的'\0'"
char arr2[] = {
'a', 'b', 'c', '\0'};
//这个后面没有隐藏的'\0'所以要自己加一个\0
//strlen - string length-计算字符串长度的
printf("%d\n",strlen(arr1));
//它的字符串长度为3
printf("%d\n",strlen(arr2));
//它的字符串长度没加\0之前是随机值,但加了\0之后就是3个
return 0;
转义字符
转义字符 | 释义 |
---|---|
\? | 在书写连续多个问号时使用,防止他们被解析成三字母词 |
\’ | 用于表示常量字符’ |
\’’ | 用来表示一个字符串内部的双引号 |
\\ | 用来表示一个反斜杠,防止它被解释为一个转义序列表。 |
\a | 警告字符,蜂鸣 |
\b | 退格符 |
\f | 进纸符 |
\n | 换行 |
\ r | 回车 |
\ t | 水平制表符 |
\v | 垂直制表符 |
\ddd | ddd表示1~3个八进制的数字。如:\130 |
\xdd | 表示2个16进制的数字.如\x30 0 |
转义字符\ddd
八进制转十进制
#include<stdio.h>
#include<string.h>
int main()
{
//strlen - string length-计算字符串长度的
printf("%d\n",strlen("c:\test\32\test.c"));
//下面的32可以理解为3和2
//32 -- 32是2个8进制数字
//32作为8进制代表的那个十进制数字,作为ASCII值对应的字符
//32是两个八进制转化为十进制就是26方法下图所示
//26对应的ASCII值就是 向右的箭头(-->)
printf("%c\n",'\32');
//上面结果就是-->
//所以/32是一个转义字符 它的长度只能算一个
}
\xdd 16进制数字转10进制数字
#include<stdio.h>
int main()
{
printf("%c\n",'\x61');
//61 就是两个16进制可以看成6和1
//转化的结果看下图
//这里的执行结果是 97对应的ASCII就是 a
//所以\x61它的长度就是1个字符
return 0;
}
选择语句 if else
如果好好学习,那么就会找到好工作
否则 , 那么就只能回家种地
#include<stdio.h>
int main()
{
int input = 0;
printf("你要好好学习?(1/0)>:");
printf("请选择1或者0\n");
scanf("%d", &input);
if (input == 1)
{
printf("offer\n");
}
else
{
printf("完了\n");
}
return 0;
}
数组
要存储1~10的数字咋样存储?
c语言种给了数组的定义:一组相同类型元素的集合
#include<stdio.h>
int main()
{
int arr[10];
//定义一个存放10个整数数字的数组
char ch[20];
//定义20个字符数组
return 0;
}
数组的赋值和下标
#include<stdio.h>
int main()
{
//数组的赋值就是下面这样
int arr[10] = {
1,2,3,4,5,6,7,8,9,10};
//下标默认从0开始 0 1 2 3 4 5 6 7 8 9
//下标的目的是访问这个数组中的某个元素
printf("%d\n",arr[4]);结果是5
/*arr[4]就是找到下标为4对应的元素
这里的下标4对应的结果是5
下标的方式访问元素 arr[下标]
*/
return 0;
}
打印数组所有元素方法
#include<stdio.h>
int main()
{
int i = 0;
int arr[] = {
1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
//定义一个存放十个整数数字的数组
while (i < 10)
{
printf("第%d次的值是%d\n ",i+1,arr[i]);
//下标的方式访问元素 arr[下标]
i++;
}
return 0;
}
//数组arr[] 1 2 3 4 5 6 7 8 9 10
//数组的下标 0 1 2 3 4 5 6 7 8 9
//从0开始的,最重点的是访问数组的元素
算术操作符处识
+ | 加 |
---|---|
_ | 减 |
* | 乘 |
/ | 除 |
% | 取模 |
主要介绍一下%取模符号
#include<stdio.h>
int main()
{
int a = 5%2;
printf("%d\n",a);//结果是1 取模就是去余数
return 0;
}
移位操作符 << 左移 和 >> 右移
移动的是二进制位
<< | 左移位操作符 |
---|---|
>> | 右移位操作符 |
下面是左移位操作符
#include<stdio.h>
int main()
{
//移(2进制)位操作符
//<< 左移
//>> 右移
int a = 1;
//1的二进制是01
//整型占了4个字节32个比特位
//00000000000000000000000000000001
a << 1;//就是把上面二进制向左移动一位
//移动过程下图所示
//移动之后就变成了00000000000000000000000000000010
//10的十进制就是2
int b = a << 1;
printf("%d\n",b);
//所以结果就变成了2
printf("%d\n",a);
/*a的结果还是1所以说对a进行移位操作
a值的本身是不会发生变化*/
return 0;
}
移动过程下图所示
向做移动几位就要给后面补几个0
同理有移动也一样可以参照上面方式
位操作符
& | 按位与 |
---|---|
^ | 按位异或 |
| | 按位 或 |
#include<stdio.h>
#include<string.h>
int main()
{
//都是(2进制)位操作
//&按位与
//|按位或
//^按位异或
/* 按位与
int a = 3;
int b = 5;
int c = a&b;
3的二进制是 0 1 1
5的二进制是 1 0 1
a&b只要有0就是假 假 假 真 上下比较
c语言种假0真1所以
printf("%d\n",c);//c=1
a&b 结果是 001 转为10进制是1
*/
/* 按位或
int a = 3;
int b = 5;
int c = a|b;
3的二进制是 0 1 1
5的二进制是 1 0 1
a|b只要有一个1就是真 1 1 1 上下比较
printf("%d\n",c);//c=7
a|b 结果是 111 转为10进制是7
*/
/* ^按位异或
int a = 3;
int b = 5;
int c = a^b;//^不是次方的意思 而是按位异或
a^b的计算规律是
对应的二进制位相同,则为0
对应的二进制位相反,则为1
3的二进制是 0 1 1
5的二进制是 1 0 1
a^b是 1 1 0
printf("%d\n",c);//c=6
a^b 结果是 110 转为10进制是6
*/
printf("%d\n", c);
return 0;
}
/*
二进制 1 1 1 1
1*2^3 1*2^2 1*2^1 1*2^0
8 4 2 1
十进制
6 0 1 1 0 这4+2是0+4+2+0所以六的2进制是 0110
8 1 0 0 0 这是8+0+0+0所以8的二进制数是 1000
13 1 1 0 1 这是8+4+0+1所以13的二进制是1101
*/
赋值操作符
= | 赋值 |
---|---|
+= | |
-+ | |
*= | |
/= | |
&= | |
^= | |
|= | |
>>= | |
<<= |
具体看下面代码
#include<stdio.h>
#include<string.h>
int main()
{
int a = 10; // =赋值 ==判断相等
a = 20;
a = a + 10;
a += 10;
a = a - 10;
a -= 10;
a = a & 2;
a &= 2;
//复合赋值符
return 0;
}
双目操作符
#include<stdio.h>
int main()
{
int a = 10;
int b = 20;
a + b;// +有两个操作数叫双目操作符
return 0;
}
单目操作符
! | 逻辑反操作 |
---|---|
- | 负值 |
+ | 正值 |
& | 取地址 |
sizeof | 操作数的类型长度 |
~ | 对一个数二进制按位取反 |
– | 前置,后置– |
++ | 前置,后置++ |
* | 间接访问操作符(解引用操作符) |
(类型) | 强制类型转换 |
! 的用法
#include<stdio.h>
int main()
{
/* !用法
c语言中我们表示真假,0就是假 ,非0就是真一般用1来表示
! 把真的变成假的,把假的变成真的
*/
int a = 10;
printf("%d\n",a);//结果是10
printf("%d\n",!a);//结果是0
return 0;
}
sizeof 计算的是变量/类型 所占空间大小,单位是字节
sizeof用法
#include<stdio.h>
int main()
{
//计算数组的元素个数
//数组的总大小(字节)/每个元素的大小(字节)
int arr[10] = {
0};
int sz = 0;
printf("%d\n", sizeof(arr));
//总大小是40 因为一个int是4个字节那么10个int就是40
sz = sizeof(arr) / sizeof(arr[0]);//sizeof(arr)大小是40字节 sizeof(arr[0])一个元素是四个字节
printf("%d\n", sz);
int arr[10] = {
0};
printf("%d\n", sizeof(arr));
int a = 10;
//sizeof 计算的是变量/类型所占空间的大小,单位是字节
printf("%d\n", sizeof(a));
printf("%d\n", sizeof(int));
//printf("%d\n", sizeof a);
return 0;
}
~ 对一个数二进制按位取反
#include<stdio.h>
int main()
{
int a = 0;//4个字节,32bit位
int b = ~a;
// ~ --按(2进制)位取反
//00000000000000000000000000000000
//按位取反
//11111111111111111111111111111111
printf("%d\n",b);
//结果就是-1
//因为上面111111111111111符号位是1所以
//是负数,负数在内存中存的是二进制的补码,
//反码是11111111111111111111111110
//源码时10000000000000000000000001
//1是符号位表示负数-
//所以结果是-1
return 0;
}
- - 操作符 和 ++操作符
后置 a++
#include<stdio.h>
int main()
{
int a = 10;
int b = a++;
//后置++ a先给b使用,使用完了在自增
printf("a=%d,b=%d\n",a,b);
//所以结果是b=10,a=11;
return 0;
}
前置 ++a
#include<stdio.h>
int main()
{
int a = 10;
int b = ++a;
//前置++ a先完成自增,然后在给b使用
printf("a=%d,b=%d\n", a, b);
//所以结果是 a= 11; b=11;都是11
return 0;
}
后置a- -
#include<stdio.h>
int main()
{
int a = 10;
int b = a--;
//后置a--先给b使用然后在自减
printf("a=%d,b=%d\n",a,b);
//所以结果是a=9; b =10;
return 0;
}
前置 --a
#include<stdio.h>
int main()
{
int a = 10;
int b = --a;
//--a是先自己自减,然后在给b使用
printf("a=%d,b=%d\n",a,b);
//所以结果是:a= 9;b=;
return 0;
}