C基础

system函数

位于stdio.h,用于调用系统的函数;

1
2
3
4
// 停止当前函数
system("pause"); // 等价(等待输入):getchar();
// 调出windows绘图软件
system("mspaint");

头文件

头文件中声明了函数,但是并没有函数体,相当于Java的接口;

#include<stdio.h>

不同的系统平台对C的头文件中的函数有不同的实现(.so库),在编译时,会去找到当前系统的对该
头文件中对该函数的实现,替换到对应位置;

正是由于C的这个特点,即使是不同的头文件也不能有同名的函数,否则将编译失败!

占位符

1
2
3
4
5
6
7
8
9
int、short    %d
long %ld
float %f
double %lf
char %c
%x 十六进制整数
%#x 带0x开头十六进制整数
%o 八进制整数
%s 字符串

基础函数

  • sizeof(int/char) 输出类型的所占用的字节数;

typedef 定义别名

别名的作用能让变量定义的含义更加清晰,可以根据不同的环境,定义不同的别名;

比如typedef int jint 这样定义jni专用的int

1
2
3
4
5
typedef int Age;

void main(){
Age xiaoming = 10;
}

为int定义别名,可以起到定义变量名的作用;

typedef另一个重要的作用,就是能够简化变量的声明,比如对结构体:

1
2
3
4
5
6
7
8
9
10
11
12
13
// 定义结构体和指针的别名
typedef struct Woman{
int age;
char name[20];
} W,*WP;

void main(){
// 声明结构体变量时,无需再通过struct声明
W w = { 11, "woman" };
//多定义一个指针,用来实现引用传递
WP wp = &w;
printf("%d,%s\n", wp->age, wp->name);
}

联合体(共用体)

多种不同类型的变量共用一段内存,之间会相互覆盖,也就是说,同一个联合体中只能有一个成员是
有效的。

联合体的大小以占用内存最大的成员为准;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
union MyUnion{
int x;
long y;
};

void main(){
union MyUnion mu = { 10 };
printf("%d\n",mu.x);

mu.x = 10;
// 最后一次赋值才是有效的
mu.y = 10000000;

printf("%d\n", mu.x);
printf("%ld\n", mu.y);


system("pause");
}

联体可以用来模拟Java中的object效果,有时候传参,并不能确定具体的类型,此时通过联合体,
定义多种的数据类型,可以接收任意类型的参数;

1
2
3
4
5
6
7
8
9
10
11
typedef union jvalue{
jboolean z;
jbyte b;
jchar c;
jshort s;
jint i;
jlong j;
jfloat f;
jdouble d;
jobject l;
} jvalue;

枚举

枚举中每一种类型都有对应的整型数值;

1
2
3
4
5
6
7
8
9
10
11
12
13
enum Day{
Mon=1,
Tue,
Wed,
Thu,
Fri
};

void main(){
enum Day d = Thu;
printf("%#x,%d\n", &d, d);
system("pause");
}