#include
int main()
{
int a = 7;
int b = 3;
printf("a + b=%d\n", a + b);
printf("a - b=%d\n", a - b);
printf("a * b=%d\n", a * b);
printf("a / b=%d\n", a / b);
printf("a %% b=%d\n", a % b);
return 0;
}
#include
int main()
{
int a = 2;
printf("a>>1=%d\n", a >> 1);
printf("a<<1=%d\n", a << 1);
return 0;
}
#include
int main()
{
int a = 5;
int b = 3;
int c = a&b;
printf("a&b=%d\n", c);
int d = a^b;
printf("a^b=%d\n", d);
int f = a | b;
printf("a|b=%d\n", f);
return 0;
}
a=a+5等同于a+=5,其他类似
#include
int main()
{
//sizeof是一个操作符
//不是函数
//计算类型或者变量的大小的
int a = 10;
printf("sizeof(int)=%d\n", sizeof(int));
printf("sizeof(a)=%d\n", sizeof(a));
int arr[10] = {
0 };
printf("sizeof(arr)=%d\n", sizeof(arr));//计算的是数组的总大小,单位是字节——40
printf("sizeof(arr[0])=%d\n", sizeof(arr[0]));
int sz = sizeof(arr) / sizeof(arr[0]);
printf("sz=%d\n", sz);
return 0;
return 0;
}
#include
int main()
{
//~按(二进制)位取反 把所有二进制位中数字1变0,0变1.
int a = 0;
printf("~a=%d\n", ~a);
return 0;
}
#include
int main()
{
int a = 10;
int c = ++a;//前置++,先++再使用
printf("a=%d\n", a);
printf("++a=%d\n", c);
int b = 10;
int d = b++;//后置++,先使用再++
printf("b=%d\n", a);
printf("b++=%d\n", d);
return 0;
}
#include
int main()
{
int a = 3;
double b = 3.14;
printf("*(&a)=%d\n", *(&a));
printf("(int)b=%d\n", (int)b);//将float类型强制转化成int类型
return 0;
}
#include
int main()
{
int a = 3;
int b = 5;
int max = 0;
max = a > b ? a : b;
printf("max=%d\n", max);
return 0;
}
//exp1成立,表达式结果为exp2
//exp1不成立,表达式结果为exp3
#include
int main()
{
int a = 0;
int b = 3;
int c = 5;
int d = (a = b + 2, c = a - 4, b = c + 2);
//逗号表达式从左向右依次计算
//整个表达式结果是最后一个表达式的结果
printf("d=%d\n", d);
return 0;
}
//下标引用
int main()
{
int arr[10]={
1,2,3,4,5,6,7,8,9,10};
printf("%d",arr[5]);
return 0;
}
//函数调用操作符
int main()
{
//函数调用的时候函数,函数名后()就是函数调用操作符
printf("hehe");
printf("%d",100);
return 0;
}
1.C语言提供,不能自己创造
2.变量名不能是关键字
常见关键字
关键字 | 说明 |
---|---|
auto | 自动变量 |
break | 跳出当前循环 |
case | 开关语句分支 |
char | 字符型 |
const | 只读变量 |
contine | 结束当前循环,进入下一轮循环 |
default | 开关语句中的其他分支 |
do | 循环语句 |
double | 双精度浮点型 |
else | 条件语句的否定分支,常与if连用 |
enum | 枚举型 |
extern | 申明外部符号 |
float | 单精度浮点型 |
for | 循环语句 |
goto | 无条件跳转语句 |
if | 条件语句 |
int | 整型 |
long | 长整型 |
register | 寄存器关键字 |
return | 函数返回 |
short | 短整型 |
signed | 有符号 |
sizeof | 计算数据长度 |
static | 静态变量 |
struct | 结构体变量 |
switch | 用于开关语句 |
typedef | 类型重命名 |
union | 联合体共用体 |
unsigned | 无符号 |
void | 声明函数无返回值 |
volatile | 变量在程序执行中可被隐含地改变 |
while | 用于循环语句 |
typedef:类型重命名
#include
typedef unsigned int u_int;//注意分号
int main()
{
unsigned int num = 100;
u_int num2 = 100;
printf("num=%d\n", num);
printf("num2=%d\n", num2);
return 0;
}
static
(1)static修饰局部变量
比较下面两幅图
说明:static修饰局部变量改变局部变量的生命周期(本质上是改变了变量的存储类型,从栈区变为静态区)
(2)static修饰全局变量
全局变量,在其他源文件内部可以使用,是因为全局变量具有外部链接属性
但是被static修饰后,就变成了内部链接属性,其他源文件就不能链接到这个静态的全局变量了
(3)static修饰函数
static修饰函数,使的函数只能在自己所在的源文件内部使用,不能在其他源文件内部使用
本质上:static是将函数的外部链接属性变成了内部链接属性!(和static修饰的全局变量一样!)
//define定义常量
#include
#define MAX 10
//define定义宏
#define ADD1(x,y) x+y
#define ADD2(x,y) ((x)+(y))
int main()
{
printf("MAX=%d\n", MAX);
printf("4 * ADD1(2, 3)=%d\n", 4 * ADD1(2, 3));
printf("4 * ADD2(2, 3)=%d\n", 4 * ADD2(2, 3));
return 0;
}
想要了解指针的概念,首先要明白内存的含义
内存是电脑上特别重要的存储器,计算机中所有程序的运行都是在内存中进行的。
所以为了有效的使用内存,就把内存划分成一个个小的内存单元 ,每个内存单元的大小是1个字节。为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。
int main()
{
int a = 10;//a在内存中要分配空间
printf("&a=%p\n", &a);//%p专门打印地址
int* pa = &a;//pa是用来存放地址,C语言中pa叫指针变量
printf("pa=%p\n", pa);
// * 说明pa是指针变量
//int 说明pa的执行对象是int类型的
int b = 10;
int* pb = &b;//*解引用操作 *pb通过pb的地址找到b
*pb = 20;
printf("b=%d\n", b);//20
char ch = 'A';
char* pc = &ch;
*pc = 'B';
printf("ch=%c\n", ch);
return 0;
}
结构体可以让C语言创建新的类型
struct Stu
{
char name[20];//成员变量
int age;
double score;
};
int main()
{
struct Stu s = {
"张三", 20, 85.5 };//结构体的创建和初始化
printf("1:姓名:%s 年龄:%d 成绩:%lf\n", s.name, s.age, s.score);//结构体变量.成员变量
struct Stu * pa = &s;
printf("2:姓名:%s 年龄:%d 成绩:%lf\n", (*pa).name, (*pa).age, (*pa).score);
printf("3:姓名:%s 年龄:%d 成绩:%lf\n", pa->name, pa->age, pa->score);
//结构体指针->成员变量名
return 0;
}