欢迎光临散文网 会员登陆 & 注册

c笔记

2021-09-14 23:37 作者:秋名山西  | 我要投稿

今天见到一个新程序,刚好有些思考,在此做一些记录。程序:

#include<stdio.h>

int main()
{
    int a[]={384,385,386};
    char* p=( char*)a;
    printf("%p\n", p);
    printf("%p\n", a);
    printf("%d\n", *p);
    printf("%d\n", *( p+1));
    printf("%d\n", *( p+4));
    return 0;
}

运行的结果为

旗鱼c语言编译器结果


解释:c语言中,基本数据类型都以整数的补码的形式存储,遵循低位在前,高位在后的原则。384的补码为1 1000 0000,硬盘上存储为:1000  0000(第一字节),0000 0001(第二字节),0000 0000(第三字节),0000 0000(第四字节)因此程序中通过类型强制转换,p所指向的值就是384补码的第一个字节,即1000 000,转换为十进制即128,p+1的指向结果为0000 0001,即为1,p+4则指向385补码的低八位。

其他的照此分析,主要是弄清楚数据的存储方式以及不同数据类型所占的存储空间的区别。


c笔记的评论 (共 条)

分享到微博请遵守国家法律