1、打印二进制机器码,程序内存分析,大端序小端序,指针数组,数组指针,数组的三种访问方式,typedef,#if-0-#endif,求数组大小,括号表达式



1.打印二进制机器码(分别表示32位的和64位的)

#include <stdio.h>

 

/*按照8位的长度打印一个数值*/

void dis8bit(char val)

{

   int bit = 8;

   while(bit--)

    {

       if(1<<bit&val){

           printf("1");

       } else {

           printf("0");

       }

       if(!(bit%4))

           printf(" ");

    }

   putchar(10);

}

 

/*按照32位长度打印数值的机器码*/

void dis32bit(int val){

   int bit = 32;

   while(bit--){

       if(1<<bit&val){

           printf("1");

       } else {

           printf("0");

       }

       if(!(bit % 4))

           printf(" ");

    }

   putchar(10);

}

 

int main(void)

{

   int a = -1,b = -128,c = 127,d = 0;

   dis8bit(a);

   dis8bit(b);

   dis8bit(c);

   dis8bit(d);

 

   int e = 127;

dis32bit(e);

 

   return 0;

}

2.关于程序内存。

Bss区的生命周期是从程序的开始到程序的结束。

 

3.关于数据在内存中的存储

int a;全局变量,并且未初始化,所在在数据段的bss区。被初始化为0

static int b; 静态全局变量,数据段的bss段,在bss区。

int c[10] = {1,2,3,4};  全局的数组在data段,这里的数据在运行的时候会被拷贝来的。

 

4.大端存储和小端存储引起的问题

在内存中的分析如下:

 

5.数据类型   *    指针变量

指针变量,本质同普通变量。

* 指明后面的变量为指针变量

数据类型指明,从该变量存放的地址处的寻址能力。

char *p;  代表了从p这个地址处的寻址能力是1个字节,(因为char *类型的寻址能力为1个字节)。

指针的一个重要概念   步长 =  数据类型的大小

int a[10]等价于==int[10]  a;

 

6.关于typedef关键字

typedef int ARRAY[10];   给数组定义别名

给参数起别名的步骤:

再如:

void (*p)(int,int);的别名为:typedefvoid (*pp)(int,int);这个时候pp就是指针函数的别名。

 

7.数组:

数组访问的方式有:

A:下标法,特例列举:

这里说明,如果想得到一个数组的值也可以通过i[a]è下标[数组名]的方式得到

B:偏移法的方式取数值,举例:

C:指针法

 

*p++ ==*p++

 

8.数组局部初始化

 

9.#if-0-#endif排除某段代码影响

 

10.数组求大小

求作为函数参数传递的数组名的大小:

11.括号表达式

分析:int xx[3][2] = {(1,2),(3,4),(5,6)};实际上等价于:intxx[3][2]={2,4,6};

内存分析:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

涂作权的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值