这一节还继续进行C语言的大致认识,接着上节博客复习了转义字符、函数、
sizeof的运用,新知识:
(我想告诉你... 本篇博客为不想躺平博主用来帮助自己理解C的知识,适用于基础小白,不是全部的代码,大部分是伪代码,希望对你有帮助......)
1.~操作符
2.前置操作++a符和后置操作符a++
3.关系操作符
4.逻辑操作符
5.(条件)三目操作符
6.下标引用操作符
7.关键字,重点讲了static修饰局部变量和全局变量
8.define进行宏定义变量
9.指针的逻辑解释及小小例子
//继续操作符的认识
#include<stdio.h>
//1----转义字符
int main()
{
// 字符串的结束标志:'\0'
// "abcdef";
// '\0'-转义字符-0 遇到\0才表示读取完成,\0不算一个字符
// 0-->数字0
// '0'-->ASCII 48;
// 'a''b''c''0''1''2'
//EOF--end of file
return 0;
}
//2----函数问题(接昨天学习的函数进行讲解,这里给出了一个例子)
//用函数表示两个数的大小
int Max(int x,int y)//Max的类型是int类型
{
if(x>y)
printf("max=%d\n",x);
else
printf("max=%d\n",y);
}
int main()
{
int num1=10;
int num2=20;
int max=0;
max = Max(num1,num2);
//printf("max=%d\n",max);
// if(num1>num2)
// printf("较大值是:%d\n,num1");
// else
// printf("较大值是:%d\n,num2");
return 0;
}
//3----sizeof计算数组大小
int main()
{
int a= 10;
int arr[]={1,2,3,4,5,6};//6*4=24个字节的空间
printf("%d\n",sizeof(a));//4 bytes
printf("%d\n",sizeof(int));//4 bytes
//a的括号可以去掉,但是int的括号不可以去掉,说明sizeof不是一个字符
printf("%d\n",sizeof a);//4 bytes
printf("%d\n",sizeof (arr));//计算数组大小,单位是字节//24
printf("%d\n",sizeof(arr)/sizeof(arr[0]));//6
return 0;
}
//4---- ~操作符的解释
int main()
{
int a= 0; //32bits
int b=~a;//b是有符号的整形
//~-->按(2进制)位取反
//0000000000000000000000000000000
//1111111111111111111111111111111
//原码 反码 补码
//负数在内存中存储的是二进制的补码
printf("%d\n",b);//-1//使用的,打印的是这个数的原码
//1111111111111111111111111111111
//1111111111111111111111111111110
//1000000000000000000000000000001 //-1
return 0;
}
//5---- 前置++,后置++,前置--,后置--
int main()
{
int a=10;
int b=a++; //后置++ 先把a的值赋给b,a再++ --> b=10,a=11
printf("a=%d b=%d\n",a,b);//a=11,b=10
return 0;
}
int main()
{
int a=10;
int b=++a; //前置++ 先a++,再赋给b --> a=11,b=11
printf("a=%d b=%d\n",a,b);//a=11,b=11
return 0;
}
int main()
{
int a=10;
int b=a--; //后置-- 先把a的值赋给b,a再-- --> b=10,a=9
printf("a=%d b=%d\n",a,b);//a=9,b=10
return 0;
}
int main()
{
int a=10;
int b=--a; //前置-- 先a--,再赋给b --> b=9,a=9
printf("a=%d b=%d\n",a,b);//a=9,b=9
return 0;
}
//6----(类型)--->强制转换类型
//不建议转换
int main()
{
int a=(int)3.14;//double-->int
return 0;
}
//7----其他操作符
//关系操作符
//> >= < <= != ==
//逻辑操作符
//&&
int main()
{
//真假
//1 0
//&&--逻辑与
//||--逻辑或
int a = 3;
int b = 5;
//int c = a&&b;
int c = a||b;
printf("c=%d\n",c);
return 0;
}
//条件操作符
//exp1?exp2:exp3;
//三目操作符
int Max(int x,int y)
{
if(x>y)
printf("max=%d",x);
else
printf("max=%d",y);
}
int main()
{
int a = 10;
int b = 20;
int max = 0;
max(a>b?a:b);
// if(a>b)
// max=a;
// else
// max=b;
int max = Max(x,y);
printf("max=%d\n",max);
return 0;
}
//8----下标引用操作符 函数调用操作符
//& * . ->
int Add(int x,int y)
{
int =0;
z=x+y;
return z;
}
int main()
{
int arr[10] = {0};
arr[4]; //[]下标引用操作符
int a = 10;
int b = 20;
int sum = Add(a,b);//()函数调用操作符
return 0;
}
//9----常见关键字
//auto break case char const continue default do double extern
//float else enum for goto if long register return short signed
//sizeof static struct switch typedf union unsigned void volatile while
int main()
{
auto int a = 10;//局部变量 自动变量 auto一般省略
register int a = 10;//建议把a定义成寄存器变量,我们的寄存器是有限的
int a = 10;
a = -2;//int 定义的变量是有符号的
//signed int ;
unsigned int num = 0;
struct //--结构体关键字
//union 联合体
return 0;
}
//typedef//类型定义//类型重定义
int main()
{
typedef unsigned int u-int;//u-int 就是unsigned int的别名
unsigned int num = 20;
u-int num2 = 20;
return 0;
}
//static修饰局部变量
//局部变量的生命周期变长
//static修饰全局变量
//全局变量的作用域变化
void test()
{
static int a=1;//静态局部变量,a不销毁了,输出来的就是2 3 4 5 6
//如果是int a =1;则输出的结果是2 2 2 2 2
a++;
printf("a=%d\n",a);//2 3 4 5 6
}
int main()
{
int i=0;
while(i<5)
{
test();
i++;
return 0;
}
int main()
{
// static int g_val=2020 static修饰全局变量,改变了变量的作用域,
//让静态的全局变量只能在原文件内部使用,出了源文件就无法使用了
//extern --声明外部函数符号
extern int g_val;
printf("g_val=%d\n",g_val);
return 0;
}
//static修饰函数
//声明外部函数
//static修饰函数改变了函数的连接属性
static int Add(int a,int b)//修饰过之后就找不到了
{
int z=x-y;
return z;
}//外部
extern int Add(int a,int b)
int main()
{
int a =10;
int b =20;
int sum =Add(a,b);
printf("sum=%d\n",sum);
return 0;
}
//10----define定义常量和宏
#define<stdio.h>
//#define定义标识符常量
#define MAX 100 //MAX值是100
//#define 可以定义宏/带参数
//1.函数
int Max(int x,int y)
{
if(x>y)
return x;
else
return y;
}
//2.宏的定义
#define MAX(X,Y) (X>Y?X:Y)
int main()
{
int a = MAX
int a=10;
int b=20;
//1.函数方式
int max=Max(a,b)
printf("max=%d\n",max);
//2.宏的方式(看起来比函数更简洁一点)
max=MAX(a,b);
printf("max=%d\n",max);
return 0;
}
//11----指针
/*
生活中我们通过地址-->找到空间(房间)602编号的房间
1.如何产生地址,如何来编址?
2.一个内存为多大的单元?
解释:
32位的电脑-->32根地址线/数据线(通电之后有正电1和负电0之分)
产生电信号:(2^32种可能性)可以作为内存编号,就可以产生2^32个编号
00000000000000000000000000000000
00000000000000000000000000000001
...
11111111111111111111111111111111
这些编号就叫做内存块的地址
计算机的单位:
bit
byte
kb
mb
gb
tb
pb
...
2^32bits=0.5GB(不够用!!!)
--> 一个内存上放1个字节,即1byte
*/
int main()
{
int a = 10;//向内存申请4个字节空间
//&a 取出a的地址
int* p = &a;
//有一种变量是用来存放地址的-->p 即指针变量
//int*是p的地址
//p里头存了a的地址,以后方便直接找到a的地址
printf("%p\n",&a);//打印地址,用%p
printf("%p\n",p);//&a与p的地址相同
//*p; //*解引用操作符 对p进行操作,找到它所指的对象a
*p=20;//把a内存里面的值改成了20
printf("a=%d\n",a);//a=20
return 0;
}
int main()
{
char ch = 'w';
char* pc = &ch;
*pc = 'a';
printf("%c\n",ch);
return 0;
}
//指针在32位是4个字节,在64位电脑上是8个字节
int main()
{
char ch = 'w';
char* pc = &ch;//指针名字叫pc,类型是char,char*的地址
printf("%d\n",sizeof(pc));
return 0;
}