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};
內存分析:
總結
以上是生活随笔為你收集整理的1、打印二进制机器码,程序内存分析,大端序小端序,指针数组,数组指针,数组的三种访问方式,typedef,#if-0-#endif,求数组大小,括号表达式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 拷贝的软件怎么写入注册表 拷贝软件如何添
- 下一篇: 结构体大小求值