多级指针
#include<stdio.h>
#include<malloc.h>
int main(){
int i = 5;
int* p = &i;
int** q = &p;
int*** r = &q;
printf("i的值是=%d\n",***r);
system("pause");
}
函数指针
/*
1.定义int (*pf)(int x, int y);
2.赋值 pf = add;
3.引用 pf(3,5);
*/
#include<stdio.h>
#include<malloc.h>
int add(int x,int y){
printf("x+y=%d\n",x+y);
}
int main(){
int (*pf) (int x ,int y);
pf = add;//函数名就是函数的首地址,函数指针其实就是函数的首地址
pf(3,6);
system("pause");
}
结构体
#include<stdio.h>
struct Student
{
int age; //4
float score; //4
long id; //4
char sex; //1
};
int main(void)
{
struct Student st={80,55.6f,10001,'F' };
printf("age = %d\n", st.age);
// 结构体的长度gcc+编译器做了数据字长对齐优化,提高访问效率
printf("结构体的长度 %d\n",sizeof(st));
system("pause");
}
联合体
#include <stdio.h>
main( )
{
struct date { int year, month, day; }today;
//union节省内存空间, 复用内存空间,每次只可使用union中的一个变量,union的长度为最长数据类型的长度
union { long i; int k; double d; } mix;
printf("date:%d\n",sizeof(struct date));
mix.d=923456789.123;
printf("mix:%d\n",mix.k);
printf("mix:%d\n",sizeof(mix));
system("pause");
}
枚举类型
#include <stdio.h>
enum WeekDay
{
Monday=1,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
};
int main(void)
{
//int day;
enum WeekDay day = Sunday;
printf("%d\n",day);//打印结构 7
system("pause");
return 0;
}
typedef:给类型起一个别名
int mynameveryverylongmethod(int x,int y){
}
typedef mynameveryverylongmethod vvl;