Download presentation
Presentation is loading. Please wait.
1
zhao4zhong1 (赵中) C语言指针与汇编语言地址
2
教学计划 第1次课: 演示使用VC2010查看每句C对应的汇编指令和每个C语言成分对应的汇编地址或寄存器。
第2次课: 通过求函数大小功能和求函数调用者实例了解指针与函数对应的汇编内存地址。 第3、4次课: 通过静态和动态一、二、三维数组实例了解指针与数组对应的汇编内存地址。 第5、6次课: 通过带头节点和不带头节点的单链表实例了解指针与单链表对应的汇编内存地址。 第7、8次课: 通过双向链表和双向循环链表实例了解指针与双向链表对应的汇编内存地址。 第9、10次课:通过十字链表实例了解指针与十字链表对应的汇编内存地址。
3
Alt+8 Alt+6 Alt+5 F11 Ctrl+Alt+M,2 静态和动态一、二维数组 汇编窗口 内存1 窗口 寄存器窗口
单步执行 F11 寄存器窗口 内存2 窗口 Alt+5 Ctrl+Alt+M,2
4
静态和动态一维数组 鼠标右键点whocallme.c、选移除、在弹出的对话框中点移除。
鼠标右键点源文件、添加、现有项、d:\prjzz\prj1\prj1\1darray.cpp、添加 在1darray.cpp上双击鼠标左键 #include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <typeinfo.h> int main() { int sa[4]; int *db; int k; for (k=0;k<4;k++) { sa[k]=k; } printf(" %3d",sa[k]); printf("\n"); printf("typeid(sa).name() is %s\n",typeid(sa).name()); db=(int *)malloc(4*sizeof(int)); if (NULL==db) return 1; for (k=0;k<4;k++) { db[k]=k; } printf(" %3d",db[k]); printf("\n"); printf("typeid(db).name() is %s\n",typeid(db).name()); free(db); return 0;
5
int [4] int * 代码要素 对应内存地址 字节 含义 sa 12ff1c 00 ...共16个 sa[0] 00 00 00 00
静态和动态一维数组 typeid(sa).name() int [4] 代码要素 对应内存地址 字节 含义 sa 12ff1c 00 ...共16个 静态一维数组sa[4] sa[0] 0,即sa[0]的值 sa[3] 12ff28 3,即sa[3]的值 typeid(db).name() int * db 12ff18 0x344580,动态一维数组db[4]的起始地址 db[0] 344580 0,即db[0]的值 db[3] 34458c 3,即db[3]的值
6
静态和动态二维数组 鼠标右键点1darray.cpp 、选移除、在弹出的对话框中点移除。
鼠标右键点源文件、添加、现有项、d:\prjzz\prj1\prj1\2darray.cpp、添加 在2darray.cpp上双击鼠标左键 db=(int **)malloc(3*sizeof(int *)); if (NULL==db) return 1; for (j=0;j<3;j++) { db[j]=(int *)malloc(4*sizeof(int)); if (NULL==db[j]) return 1; } for (k=0;k<4;k++) { db[j][k]=j*10+k; printf(" %3d",db[j][k]); printf("\n"); printf("typeid(db[0]).name() is %s\n",typeid(db[0]).name()); printf("typeid(db ).name() is %s\n",typeid(db ).name()); free(db[j]); free(db); return 0; #include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <typeinfo.h> int main() { int sa[3][4]; int **db; int j,k; for (j=0;j<3;j++) { for (k=0;k<4;k++) { sa[j][k]=j*10+k; } printf(" %3d",sa[j][k]); printf("\n"); printf("typeid(sa[0]).name() is %s\n",typeid(sa[0]).name()); printf("typeid(sa ).name() is %s\n",typeid(sa ).name());
7
静态和动态二维数组 sa 12fefc 00 ...共48个 静态二维数组sa[3][4] sa[0] 00 ...共16个 sa的第0行
typeid(sa[0]).name() int [4] typeid(sa ).name() int [3][4] 代码要素 对应内存地址 字节 含义 sa 12fefc 00 ...共48个 静态二维数组sa[3][4] sa[0] 00 ...共16个 sa的第0行 sa[2] 12ff1c 14 ...共16个 sa的第2行 sa[2][3] 12ff28 23,即sa[2][3]的值 typeid(db[0]).name() int * typeid(db ).name() int ** db 12fef8 c 0x5345c8,动态二维数组db[3][4]的起始地址 db[0] 5345c8 0x534610,动态二维数组db[3][4]的第0行db[0]的起始地址 db[2] 5345d0 b 0x5346b0,动态二维数组db[3][4]的第2行db[2]的起始地址 db[2][3] 5346bc 23,即db[2][3]的值
8
Thank You!
Similar presentations