数组
数组本身一种数据结构,储存数据。 int a[] ;char a[]; double a[].
结构体类型
struct point{ //struct point 数据类型名
int x;
int y;
}
char *strs[] 字符指针数组
数组初始化的过程是数组创建的同时并赋值的过程。
int a;//声明
a=10;//赋值
int a=10;//初始化
char a[]="hello\0" 字符串
结构体
struct student {
int age;
char * name;
double height;
char*tel;
}
struct student st= {"18","zs","180.5","18655453421"} //赋值
struct student { //以下五行创建结构体数据类型
int age;
char *name;
double height;
char *phone;
};
int main(int argc, const char * argv[])
{
@autoreleasepool {
struct student st={18,"zhangs",180.5,"010-888888"};
st.age=st.age+1; //年龄的改变,相当于整型变量的应用
printf("学生年龄=%d,学生姓名=%s,学生身高:%lf,学生电话:%s",st.age,st.name,st.height,st.phone); //注意"."语法,相当于“的”。结构体必须用点(“.”)语法
}
return 0;
}
结构体注意点语法!
使用时先定义类型;再赋值;引用打印数据。
结构体数组:
内存的开辟:malloc (size)
系统申请一块内存,这块内存的大小由参数决定,而参数的单位为字节。申请成功后函数返回内存块起始地址,失败返回NULL
calloc(n,size)
第一个参数为分配的单元个数,第二个参数为指定单元大小。如果分配不成功也会返回空指针(NULL)。所申请区域内的数值初始化为0
free
用于释放所申请内存块,传入参数为起始地址指针
例子
struct student st2;
printf("请输入学生年龄:\n");
scanf("%d",&st2.age);
printf("请输入学生姓名:\n");
//函数malloc动态开辟内存的空间
//形参 说明开辟空间的大小
//返回值 是开辟空间的首地址
//返回值类型(void*) 表示任意指针类型 注意强制类型转化
st2.name=(char*)malloc(sizeof(char)*20);//void*代表任意类型指针 sizeof(char)为1个字节,共20个字节
//st2.name=(char*)calloc(20, sizeof(char));//calloc 中20为分配的单元个数,第二参数为指定单元大小
scanf("%s",st2.name);
printf("请输入学生身高:\n");
scanf("%lf",&st2.height);
printf("请输入学生电话:\n");
st2.phone=(char*)malloc(sizeof(char)*20);//电话号码也开辟20个空间
scanf("%s",st2.phone);
printf("学生年龄=%d,学生姓名=%s,学生身高:%lf,学生电话:%s",st2.age,st2.name,st2.height,st2.phone);
free(st2.name);//回收内存空间
free(st2.phone);//回收内存空间
全局数组和静态数组: 关乎到数据变量的生命周期
int max1(int a,int b){ int max;
if(a>b){ max=a;}
else{ max=b;}
return max; }
此时,max的生命周期出不了大括号,属于局部变量
1、全局变量不依附于大括号,在程序代码中是一直有效的,除非相关程序结束。 应用前提:好几种不同方法都要用到的变量,那么我们把它声明为全局变量。
2、静态变量 static 意味着该变量只能被创建一次,以后不可能被创建 一次创建,永远有效
栈区、堆区、全局区
二分查找算法?冒泡排序算法?
strcpy; strcat; strlen; strcmp