“~”按(二进制)位取反
#include<stdio.h>
int main()
{
int a = 0;
printf("~a = %d", ~a);
return 0;
}
整数a=0;其二进制:
0000 0000 0000 0000 0000 0000 0000 0000
而整数在内存中存储的是补码,其中负整数的过程如下:
-1:
1000 0000 0000 0000 0000 0000 0000 0001(原码)
1111 1111 1111 1111 1111 1111 1111 1110(反码)
1111 1111 1111 1111 1111 1111 1111 1111(补码)
正整数的原码反码补码都相同
条件操作符(三目操作符)
? :
exp1?exp2:exp3
exp1成立exp2计算;exp1不成立exp3计算
逗号表达式:逗号隔开的一串表达式
常见关键字:
auto 是自动的——每个局部变量都是auto修饰的
extern用来声明外部符号
register寄存器关键字
signed有符号的整数—— -20
unsigned无符号的整数
static静态的!!
union联合体(共用体)
注意!!!define与include不是关键字,他们是预处理指令
关于typedef的类型定义
类型重定义!
static修饰局部变量时,改变了局部变量的生命周期(本质上是改变了变量的存储类型)
当static修饰全局变量时,使得这个全局变量只能在自己所在的源文件(.c)内部可以使用,其他源文件不能使用!!
static修饰函数时,使得函数只能在自己所在的源文件内部使用,不能在其他源文件内部使用
本质上来说:static是将函数的外部链接属性变成了内部连接属性!!(和static修饰全局变量一样)
#define定义常量和宏
定义宏:
#include<stdio.h>
#define ADD(X,Y) ((X)+(Y))
int main()
{
printf("%d\n", 4 * ADD(2, 3));
return 0;
}
定义常量:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#define Max 50
int main()
{
printf("%d\n",Max);
return 0;
}
指针
#include<stdio.h>
int main ()
{
int a = 10;\\a在内存中要分配空间的——4个字节
return 0;
}
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int num = 10;
int* p = #
*p = 20;
printf("num = %d\n", num);
return 0;
}
指针的大小是相同的!!!!
指针是用来存放地址的,指针需要多大的空间,取决于地址的存储需要多大空间。
结构体
#include<stdio.h>
struct stu
{
char arr[20];
int age;
double score;
};
int main()
{
struct stu s = { "张三",20,85.5 };
printf("1:%s %d %lf\n", s.arr, s.age, s.score);
struct stu * ps = &s;
printf("2:%s %d %lf\n", (*ps).arr, (*ps).age, (*ps).score);
printf("3:%s %d %lf\n", ps->arr, ps->age, ps->score);
return 0;
}