占位符:
- int–>%d
- long int–>%ld
- char–>%c
- float–>%f
- 短整形(short)–>%hd
- double–>%lf
- 十六进制输出–>%#x
- 无符号(unsigned)–>%u
- 字符串–>%s
- 八进制–>%o
- 确定位数的浮点型:%.4f
指针
指针和指针变量的区别:
- 指针就是内存地址。
- 内存地址就是内存单元的编号(存放1和0的东西)。
- 指针变量就是存放内存地址的变量。
int i = 10;
int *p;
p = &i;
printf("地址 = %d",p);
printf("地址所放的值 = %d",*p);
printf("地址所放的值 = %d",i);
printf("地址所放的值 = %d",&i);
输出:
多级指针:
//定义一个int类型的变量,并且赋值为100
int i = 100;
//定义一个int类型的一级指针变量p1,并且把i的地址赋值给它
int* p1 = &i;
//定义一个int类型的二级指针变量p2,并且把p1的地址赋值给它
int** p2 = &p1;
//定义一个int类型的三级指针变量p3,并且把p3的地址赋值给它
int*** p3 = &p2;
//定义一个int类型的四级指针变量p4,并且把p3的地址赋值给它
int**** p4 = &p3;
//多级指针取值
printf("****p4的值%d\n",****p4);
数组
- 定义:
int array[] = {1,1,1,};
int array[] =
动态分配内存:
// 分配一个int大小的内存。
int* temp = malloc(sizeof(int));
// 移动分配大小
int* array = malloc(4 * 4);
*(array) = 1;
*(array + 1) = 2;
.....
// 重新分配大小
temp = realloc(temp,12);
函数指针:
- 返回值、参数的类型和个数
//定义一个函数
int add(int a,int b) {
return a + b;
}
main() {
//定义函数指针
//返回值类型,变量名可以随便取,函数没有方法体
int (*point)(int a,int b);
//给函数指针赋值
point = add;
//使用函数指针
int result= point(12,5);
printf("result=%d\n",result);
system("pause");
}
Unition联合体
// 声明联合体的时候不能进行赋值。
union Mix {
long i;//4个字节
int k;//4个字节
};
main() {
printf("mix长度=%d\n",sizeof(union Mix));
union Mix m;
m.k=100;
m.k=123;
printf("m.i=%d\n",m.i);
printf("m.k=%d\n",m.k);
system("pause");
}
枚举
/**
枚举的值是递增的,首元素默认等于0
*/
enum WeekDay {
Monday=1,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
};
main() {
//enum WeekDay day= Sunday;
printf("%d\n",Sunday);
system("pause");
}
Typedef(别名)
- 为一个东西取一个别名。
typedef int i;//给int类型取了个别名叫i
typedef long l;//给long类型取了个别名叫l
main() {
//这里i就代表了int类型
i a=10;
//l就代表了long类型
l b=1234355466;
printf("a=%d\n",a);
printf("b=%ld\n",b);
system("pause");
}
结构体
struct Student {
int age;//年龄
float score;//分数
char sex;//性别
};
main() {
//使用结构体,并对变量进行初始化
struct Student stu= {18,90.9,'W'};
printf("age=%d\n",stu.age);
printf("score=%.1f\n",stu.score);
printf("sex=%c\n",stu.sex);
//结构体赋值
stu.age=20;
stu.score=100;
stu.sex='M';
printf("age=%d\n",stu.age);
printf("score=%.1f\n",stu.score);
printf("sex=%c\n",stu.sex);
};
结构体指针和多级结构体指针
struct Student {
int age;//年龄
float score;//分数
char sex;//性别
};
main() {
//使用结构体
struct Student stu= {18,90.9,'W'};
//结构体指针
struct Student* point = &stu;
//结构体指针取值,(*point)取得是结构体
printf("(*point).age=%d\n",(*point).age);
//(*point).age等价于point->age;
printf("point->age=%d\n",point->age);
printf("point->score=%.1f\n",point->score);
printf("point->sex=%c\n",point->sex);
//结构体赋值
point->age=22;
printf("修改后age=%d\n",point->age);
};