A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵安庆 中级黑马   /  2016-5-8 00:46  /  1286 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1、安全的字符串读取和输出的函数
读入字符串的方法:
1) scanf 缺点:不能接收空格
2) gets 优点:可以接受含有空格的字符串
3) fgets(); 优点:可以帮我们根据数组的长度自动截取适当的长度保存
使用格式:fgets(ch,sizeof(ch),stdin);

输出字符串的方法:
1) printf() %s 缺点:不能自动换行
2) puts() 优点:可以自动换行
3) fputs(); 不可以的自动换行
使用格式:fputs(ch,stdout); //stdout表示输出


2、const修饰符的使用
作用:const作用可以把变量变成只读的(常量)
1)修饰变量
const int a=23;
a = 20; (错误的)
2)修饰指针
const int *p; //指向可变 ,值不能变
int const *p; //同上
int * const p; //指向不可变,值可变
const int* const p;// 指向和值都不能变

技巧:
const 在 * 的左侧          指向可变,值不能变
const 在 * 的右侧         指向不可变 值可变
const 在 * 的两侧         指向和值都不可以变


3、C语言中的内存管理
内存分为5大区域
栈区 -- 存放局部变量,临时变量
堆区 -- 程序运行过程中,动态分配的内存
BSS区 -- 未初始化的全局变量和静态变量
数据段 -- 已经初始化的全局变量和静态变量
代码段 -- 程序编译产生的二进制的数据


4、动态内存管理
1) malloc
(void *)malloc(n) //动态的向内存申请连续的n个字节 返回的是新申请的内存空间的首地址
int *p = (int *)malloc(100); //p是在栈区 malloc(100) 在堆区
malloc不会把新申请的空间初始化
memset(p,0,100); //全部初始化为0

2) calloc
int *p = (int *)calloc(5,4); //申请5个长度为4的空间
calloc可以把新申请的空间初始化0

注意:判断一个空间是否申请成功
if(p!=NULL){ //只有申请成功了,才能操作
}

3) realloc
重新改变一块内存空间的大小 p = (int *)realloc(p,size);

4) free
释放我们指定的内存空间
free(p); //p是我们新申请的内存单元 free后,p是一个野指针
如果不释放,造成内存的泄露


5、指针和函数之间的关系
1)返回值是指针的函数 指针函数
char * getday(){
    return "星期一";
}

2)函数指针
指向函数的指针
格式:返回值 (*指针变量名)(函数的参数);
int sum(int a,int b){
    return a+b;
}

格式一:int (*p1)(int a,int b); // 函数指针p1 只能指向返回值是int类型,并且有两个int 类型参数的函数。
格式二:int (*p2)(int,int);

技巧:
声明的格式:int sum(int a,int b);
int (*p3)(int a,int b) = sum;
p3 = sum;

6、结构体
什么是结构体?
答:若干个相同或者不同类型的数据组成的新的类型

如何定义结构体
struct 结构体名{
    成员列表; 格式: 类型 变量名;
};


7、什么是结构体变量
结构体变量特点:
一个复合类型,具备结构体的特性
struct stu{
    int age;
}stu1,stu2;

//匿名结构体
struct{
    int model;
}s1;

//先定义结构体,后定义变量
struct stu stu3;


8、如何初始化结构体变量
初始化的时候,注意成员的顺序
1)
struct stu{
    int age;
    char name[20];
}stu1={23,"sss"};
2)
struct stu stu3={18,"sb"};
3)
struct stu stu4;
strcpy(stu4.name,"xxxx");//stu4.name="xxx";
访问姓名  stu4.name  // 结构体变量.成员名
访问age    stu4.age


9、 结构体存储空间
结构体在内存中占用的存储空间是 所有元素占用空间之和(考虑对齐)
1.逐个元素对齐(下个元素与上个元素对齐)
2.整体对齐(最后的和能单独整除所有元素)

2 个回复

倒序浏览
55666666666666
回复 使用道具 举报
666666666666666666
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马