在IOS开发的过程中,溢出会在解决问题中遇到,但是大小端一般不会遇到,最近也是研究了一下分享给大家
溢出
一、概念:
数据类型超过了计算机字长的界限而出现的数据溢出,也就是说当应用程序读取用户数据,复制到应用程序开辟的内存缓冲区中,却无法保证缓冲区的空间足够时 ,就存在溢出现象.
二、代码示例:
#include <stdio.h>
int main(void) {
short var_s=32767;
var_s++;
printf("var_s+1=%d\n",var_s++);
return 0;
}
三、日志打印:
var_s+1=-32768
Program ended with exit code: 0
四、原因分析:
短整型short int存储空间是2个字节,16位,有效范围:-215~215-1,即-32768~32767,当var_s加1后就无法保证内存空间足够大去存储,所以结果不会是32768.
大小端
一、概念:
大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,地址由低到高增加,而数据从高位往低位放。
小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。
二、代码示例:
#include <stdio.h>
int main(void) {
short var_s=0x1234;
unsigned char *var_p;
var_p=&var_s;
printf("var_p content is %p\n",var_p);
printf("var_p+1 content is %p\n",var_p+1);
printf("*var_p= %d\n",*var_p);
printf("*(var_p+1)= %d\n",*(var_p+1));
return 0;
}
三、日志打印:
var_p content is 0x7fff5fbff7ca
var_p+1 content is 0x7fff5fbff7cb
*var_p=52//0x34
*(var_p+1) =18//0x12
Program ended with exit code: 0
四、图例说明:
大小端.png注:编译器不同可能大小端的存储方式也不同,也就是说在这台电脑试验是大端,可能在别的电脑试验出小端存储
网友评论