02类型转化 进程空间 数组2015/08/26
2015-08-26 21:22
246 查看
类型转化
小变量赋给大类型
char a = -1; int b = a; b是-1
a的符号位是1,并且a是小变量,赋给int,是4个字节的,大类型,按照低字节对齐,前面进行符号位扩充
a的二进制 1111 1111 b的二进制 1111 1111 1111 1111 1111 1111 1111 1111 前面的1是符号扩充
大变量赋给小类型
int a = -256 char b = a; b是0
按照低字节对齐,如果大变量是大于char的,多的部分进行截断,如果变量小于char,就可以
a的二进制 1111 1111 1111 1111 1111 1111 0000 0000 b的二进制 0000 0000 前面的1是符号扩充
truncate 截断
隐式类型转化
整型提升 在32位机中,所有位于低于32位的整型数据,在运算过程中先要转化为32位的整型数据 ,然后才参与运算 浮点数没有无符号类型的,也就是说没有unsigned float类型。 转化规则 if 有运算数是long double,那其他的数也都转化成long double else if 有运算数是double,那其他的数也都转化成double else if 有运算数是float,那其他的数也都转化成float else if 先把数进行整型提升, 有运算数是unsigned long int,那其他的数都转化成unsigned long int else if 一个数是long int,另一个数是unsigned int,只要取决于unsigned int里面的数能否被long ing包含,如果能够包含,那就都转成 long int,否则都转成unsigned long int else if 有一个数是long int,都转化成long int else if 其中一个数是unsigned int,另一个数就转成long int else 两个数都是int >- 7%-3=1,因为余数的概念是5/2=2····1;所以余数应该满足2*2+1等于被除数,所以7/-3=-2·····1,(-2)*(-3)+1才等于7
进程空间
进程空间大致分为:系统空间,command args,stack,dynamic lib,heap,data,text 其中data里面又分为uninit(未初始化)和init(初始化),init又分为rw(读写),ro(只读) text存的是二进制可执行的文本
int main(int args, char *argv[]) //如果argv接收到的字符串在command args里面 { static i = 10; //初始化全局变量init(rw) static a; //未初始化 uninit int b = 20; //stack int *c = (int *)malloc(100); //c在static里面,malloc的空间在heap里面 char *p = "Hello World"; //“Hello World” init(ro) }
调用过程
void func(){} void main() { func(); }
上述程序压栈的过程: 操作系统运行状态-->返回地址-->main()的参数-->mian()运行状态-->返回地址-->func()的参数
一维数组
a[10] = {0}不能理解为全部清零,而是把第一个设置成0,剩余的数自动清零a[10] = {[4] = 20};把下标为4的元素设为20,其他数自动清零
[ ]:基址变址运算符
a[10] = {[4] = 20}; for(i = 0; i < 10; i++) printf("%d\n", i[a]); //*(a+i) *(i+a) a是基址 i是变址
char *p = 0; printf("%d\n", sizeof(p));
函数参数做返回值
可以通过1级指针改变0级指针(变量)的内容 可以通过2级指针改变1级指针的指向 可以通过n级指针改变n-1级指针的指向
二维数组
多维数组都要转化为1位数组来理解int a[2][3]; ====> int[3] a[2] ====>int[2][3] a printf("%p %p\n", a+0, a+1); // 相差12 int[3] a[2] //a+1可以理解为 a[2]里面有两个int[3]类型的数,a是a[2]这个数组的首元素地址,+1就是走了一个元素类型的长度 就是12 printf("%p %p\n", &a, &a+1); // 相差24 int[2][3] a //a的类型是int[2][3] 取地址&a 步长就是int[2][3]
相关文章推荐
- 设计模式之策略模式
- 最新制作 Mac 电脑 U 盘启动盘笔记
- javascirpt对象创建
- HDU3342 - Legal or Not 拓补排序模板
- (转)Qt中如何使用样式表QPalette以及相关注意事项
- js获取?后面具体参数的值
- Object -C NSSet -- 笔记
- 创建园子第一天
- EasyUI DataGrid 的常用设置
- 01文件循环位移加密 C预处理宏2015/08/24
- Windows Azure Active Directory (3) China Azure AD增加新用户
- Xcode中 黄色文件夹与蓝色文件夹的个人反思
- arcgis sever发布地图服务,使用arcmap版本不同发布不成功的探讨
- Codeforces Round #317 [AimFund Thanks-Round] (Div. 1) B. Minimization 贪心 dp
- ACM网络流模板 最大流ISAP URAL1774
- JavaSE基础整理1-基本概念
- BMP文件头设置要点
- 【全网首发】zabbix如何实现微信报警
- V4L2驱动程序架构
- 将数组元素循环右移k个位置(Java实现)