逻辑操作符
&& //和
|| //或
条件操作符(三目操作符)
exp1 ? exp2 : exp3
exp1成立,exp2计算,整个表达式的结果:exp2
exp1不成立,exp3计算,整个表达式的结果:exp3
例:
if(a > b)
max = a;
else
max = b;
=
max = a > b ? a : b;
逗号表达式
从左向右依次计算
整个表达式的结果是最后一个的结果
int c=(exp1,exp2,exp3);
printf("%d\n",c);
运行结果:
exp3
关键字
类型重命名
typedef
typedef unsigned int u_int;
int main()
{
u_int num = 1;
return 0;
}
static
void test()
{
int a=1;
a++;
printf("%d ",a);
}
int main()
{
int i=0;
while(i<10)
{
test();
i++;
}
return 0;
}
运行结果:
2 2 2 2 2 2 2 2 2 2
修改void test()内
static int a=1;
运行结果:
2 3 4 5 6 7 8 9 10 11
static代替auto修饰int a
auto表示自动创建和销毁
那static应该表示只执行一次创建过程
每次调用函数不在重新赋初值,函数结束不销毁
(本质是改变了变量的存储类型)
static修饰全局变量会使该变量只能在自己所在的源文件(.c)内部可以使用,其他源文件不能使用(extern不可用)
define 常量和宏
define定义符号
#define MAX 1000
define定义宏
#define ADD(X,Y) X+Y
注:
printf("%d\n",4*ADD(2,3));
运行结果:
11
正确书写:
printf("%d\n",4*(ADD(2,3)));
运行结果:
20
指针
%p:打印地址(地址随机分配,每次地址都不相同)
printf("%p\n",&a);
指针变量
int a = 1;
int* pa = &a;
*说明pa是指针变量
int说明pa指向的对象是int类型
解引用操作
*pa = 20;
通过pa的地址找到a
sizeof(int*)
指针的大小在32位平台是4个字节,64位是8个字节
结构体
创建新类型
struct Stu
{
char name[20];
int age;
double score;
};
引用:
struct Stu s = {"张三",20,85.5};
printf("%s %d %lf\n",s.name,s.age,s.score);
结构体指针
struct Stu *ps = &s;
printf("%s %d %lf\n",(*ps).name,(*ps).age,(*ps).score);
printf("%s %d %lf\n",ps->name,ps->age,ps->score);