1.举一个简单的例子来说明浮点型在内存中存储的特殊性
在IEEE规定下浮点数在内存中通常可以显示为(-1)*s^M*2^E的形式,在32位系统中s表示符号位且占用一个字节,m表示有效数字位占用23个字节,E表示指数位占用8个字节
指数位E是无符号数,在表示小数部分的时候也可能出现负数,所以需要 一个中间数进行过渡
无论正负如果E=-1那么存入内存中则需要+127或者+1023作为中间数存储。
int main()
{
int i = 9;
float* pfloat = ((float*)&i);
printf("%d\n", i);
printf("%f\n", *pfloat);
*pfloat = 9.0;
printf("%d\n", i);
printf("%f\n", *pfloat);
return 0;
}
代码输出
>>>9
>>>0.000000
>>>1091567616
>>>9.000000
2.指针类型和指针传参
(1)指针是个变量
(2)指针的大小是固定的在不同的平台上大小不同,32位处理器为4个字节,64位处理器为8个字节。
(3)指针的类型决定了指针+-运算的步长,也决定了解引用操作的权限。
指针也往往和数组建立联系。
字符指针的表示
int main()
{
char ch = 'w';
char* c = &ch;
printf("%c\n", *c);
return 0;
}
int main()
{
char arr[] = "abcdef";
char* pc = arr;
printf("%c\n", *pc);//数组名为首地址
return 0;
}
数组名代表首地址,指针通过解引用获得字符数组的首个元素;
指针数组和数组指针的区别
指针数组本质上是数组
例如:int*p [5];本质上是存放整型指针的数组
而数组指针本质上是指针
由于[]()的结合性高于*所以数组指针申明为 int(*p)[];