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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© archdem1 中级黑马   /  2015-8-21 23:29  /  642 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

注意定义字符串数组要用char型
i+=1这种写法不要有空格
编程中存在问题
错误for(;;)应该是分号
// 结构体变量内元素字符串应该加""
// 记住结构体family是一个大集合,下面的成员是家人,家人携带信息是元素.记住由大类到小类的关系,这样
//写结构体时不能把你的大类丢掉,从大到小写清楚.
//定义结构体数组的时候就是把结构体的成员都算上一个数组里.通过改变数组长度来选取不同的成员.
//数组定义方式,应该定义长度,或者是定义元素.不能都为空有未知错误.

一、指针
*p 和 p[]可以互换
int (*p)[2][3] = &arr
指针的指针 一环套一环
数组元素类型指针,数组类型指针。在移动地址的时候。数组指针类型跨度为一个数组,而元素类型为当前数据类型长度。
数组指针注意优先级。
   
二、内存分配问题
堆区 存储用户手动申请的内存空间,用户不释放,内存一直占用。
栈区 定义变量的时候,系统自动给分配内存空间。一旦变量执行完毕,会立即释放。
静态区 全局变量。
代码区 放函数二进制代码。
常量区 存放常量。以指针方式定义的字符串都在常量区。
指针定义字符串时常量区字符串首字母地址,也就是直接把地址告诉指针。不用&取值。
指针定义字符串是常量,数组定义字符串是变量,区别能否改变。

三,全局变量
作用域定义后下方代码,如果函数内定义同名变量用自己的.
初始化未赋值等于0
随着程序创建而创建.
char c %c=空 %d=0

四,结构体
把有关联的不同数据类型放在一起,把不同数据类型封装成一个结构.方便使用.
定义
结构 struct 结构体名称(数据类型1 名称;数据类型2 名称;.......);   
结构体变量及赋值 :struct 结构体类型 变量名 = {数据1,2,3........}};
使用
取值:变量名.结构体元素变量名
赋值:变量名.结构体元素变量名 = 新值
特点
可定义结构体类型同时,定义结构体变量名.
同一作用域不能重复定义结构体,匿名结构体除外.(struct(x,x,x)per() )不能重复使用.
结构体可以定义为全局和局部,且能嵌套定义.嵌套是层层提取.结构体.子结构体.元素名
可以在函数内外定义结构体,遵循就近原则.

结构体 变量名就是数据类型.为构造类型.
结构体必须加struct 成整体
字符指针,字符数组
指针优点 改变频繁   
数组 改变较少,节约内存
结构体只有初始化的时候才能批量赋值

五,结构体数组
储存多个有关联的结构体.作为整体使用.
struct 结构体类型 数组明[长度]={结构体1,结构体2};
   
printf("%d,%d",arr[0].name,arr[0].age)
指针指向谁就是什么类型.

六,结构体指针.
结构体名本身也不包含第一个元素的首地址.          C和指针的观点是,第一个元素的地址和结构体地址一样,但是不同类型.
结构体依次取值,char型取不了int 来强制转换
对齐原则 对齐算法(增加CPU寻址效率)
结构体内存分配.两个原则 每个元素偏移量(当前元素首地址距离整个结构体首地址的整数倍)必须是自己所占字节数的整数倍,如果不够不齐上一个元素.
整个结构体的字节数必须是最大元素的所占字符的整数倍,如果不够最后一个元素填充字节.
程序只要操作常量,变量都会分配空间,而a= 2,开辟一个临时空间存储2在赋值给a后,2的内存空间释放.



七,枚举
是一种数据类型.都是有别名的整型常量.
一群有关系的常量取名字.
定义把多个整形常量以别名的方式封装成一个整体.便于别的变量识别与使用,
定义 enum 枚举类型 {元素1,元素2....}  或 {元素1= ?,元素2=?}
定义变量及其赋值 enum 枚举类型 变量名 = 对应一个枚举类型的变量名.
当一个变量只有固定的多个int取值范围时.
枚举类型只能是INT.且不能直接用int常量.需要用别名应该全部大写
如果不设定值,默认第一个元素为0 ,以此类推上层改变也遵循默认.   
同一个枚举不能出现同一个枚举对象,且不同枚举也不行.
枚举不能遍历,遍历是针对数组的.

八,公用体
各种数据类型可以共用一片空间.但一次只能存一个值.
union person per 任意一次赋值都会把之前数据替换.

九,预处理
#define 宏定义 常量/代码
#undef  宏定义名称;
重复调用的代码,可以用宏定义替换提高效率.
可以设置作用域
命名尽量以大写形式表示.
被双引号引起来的不会被替换.
宏定义只会做代码替换,不会关心逻辑.避免出现优先级错误.(可以加括号)
例如define fadd(a+b) a+ b
fadd(a+b)*fadd(a+b)  a+b*a+b改变了优先级.

5 个回复

倒序浏览
顶一下~
回复 使用道具 举报
好详细,大神!
回复 使用道具 举报
66666666    感谢
回复 使用道具 举报
加油。努力
回复 使用道具 举报
刚好看到这边,再次复习,谢谢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马