散分+快来报名“C语言指针与汇编内存地址(三、四)”公开课

赵4老师 2016-06-12 10:36:15
加精
指针与数组及其对应的汇编内存地址
课程目标:了解指针与数组对应的汇编内存地址。
课程内容:
通过一维数组实例了解指针与数组对应的汇编内存地址。
通过二维数组实例了解指针与数组对应的汇编内存地址。
http://edu.csdn.net/huiyiCourse/detail/134
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;
}

for (k=0;k<4;k++) {
printf(" %3d",sa[k]);
}
printf("\n");

printf("typeid(sa ).name() is %s\n",typeid(sa ).name());
printf("\n");

db=(int *)malloc(4*sizeof(int));
if (NULL==db) return 1;
for (k=0;k<4;k++) {
db[k]=k;
}

for (k=0;k<4;k++) {
printf(" %3d",db[k]);
}
printf("\n");

printf("typeid(db ).name() is %s\n",typeid(db ).name());
printf("\n");

free(db);

return 0;
}
// 0 1 2 3
//typeid(sa ).name() is int [4]
//
// 0 1 2 3
//typeid(db ).name() is int *
//
//

2darray.cpp:
#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;
}
}

for (j=0;j<3;j++) {
for (k=0;k<4;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());
printf("\n");

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 (j=0;j<3;j++) {
for (k=0;k<4;k++) {
db[j][k]=j*10+k;
}
}

for (j=0;j<3;j++) {
for (k=0;k<4;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());
printf("\n");

for (j=0;j<3;j++) {
free(db[j]);
}
free(db);

return 0;
}
// 0 1 2 3
// 10 11 12 13
// 20 21 22 23
//typeid(sa[0] ).name() is int [4]
//typeid(sa ).name() is int [3][4]
//
// 0 1 2 3
// 10 11 12 13
// 20 21 22 23
//typeid(db[0] ).name() is int *
//typeid(db ).name() is int * *
//
//


课程内容:
通过三维数组实例了解指针与数组对应的汇编内存地址。
http://edu.csdn.net/huiyiCourse/detail/135
3darray.cpp:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <typeinfo.h>
int main() {
int sa[2][3][4];
int ***db;
int i,j,k;

for (i=0;i<2;i++) {
for (j=0;j<3;j++) {
for (k=0;k<4;k++) {
sa[i][j][k]=i*100+j*10+k;
}
}
}

for (i=0;i<2;i++) {
for (j=0;j<3;j++) {
for (k=0;k<4;k++) {
printf(" %3d",sa[i][j][k]);
}
printf("\n");
}
printf("----------------\n");
}

printf("typeid(sa[0][0]).name() is %s\n",typeid(sa[0][0]).name());
printf("typeid(sa[0] ).name() is %s\n",typeid(sa[0] ).name());
printf("typeid(sa ).name() is %s\n",typeid(sa ).name());
printf("\n");

db=(int ***)malloc(2*sizeof(int **));
if (NULL==db) return 1;
for (i=0;i<2;i++) {
db[i]=(int **)malloc(3*sizeof(int *));
if (NULL==db[i]) return 1;
for (j=0;j<3;j++) {
db[i][j]=(int *)malloc(4*sizeof(int));
if (NULL==db[i][j]) return 1;
}
}
for (i=0;i<2;i++) {
for (j=0;j<3;j++) {
for (k=0;k<4;k++) {
db[i][j][k]=i*100+j*10+k;
}
}
}

for (i=0;i<2;i++) {
for (j=0;j<3;j++) {
for (k=0;k<4;k++) {
printf(" %3d",db[i][j][k]);
}
printf("\n");
}
printf("----------------\n");
}

printf("typeid(db[0][0]).name() is %s\n",typeid(db[0][0]).name());
printf("typeid(db[0] ).name() is %s\n",typeid(db[0] ).name());
printf("typeid(db ).name() is %s\n",typeid(db ).name());
printf("\n");

for (i=0;i<2;i++) {
for (j=0;j<3;j++) {
free(db[i][j]);
}
free(db[i]);
}
free(db);

return 0;
}
// 0 1 2 3
// 10 11 12 13
// 20 21 22 23
//----------------
// 100 101 102 103
// 110 111 112 113
// 120 121 122 123
//----------------
//typeid(sa[0][0]).name() is int [4]
//typeid(sa[0] ).name() is int [3][4]
//typeid(sa ).name() is int [2][3][4]
//
// 0 1 2 3
// 10 11 12 13
// 20 21 22 23
//----------------
// 100 101 102 103
// 110 111 112 113
// 120 121 122 123
//----------------
//typeid(db[0][0]).name() is int *
//typeid(db[0] ).name() is int * *
//typeid(db ).name() is int * * *
//
//
...全文
2869 59 打赏 收藏 转发到动态 举报
写回复
用AI写文章
59 条回复
切换为时间正序
请发表友善的回复…
发表回复
canbaojun 2017-02-28
  • 打赏
  • 举报
回复
这个要认真学习,关于指针与内存!
cx1993cccccc 2016-07-29
  • 打赏
  • 举报
回复
violin141 2016-07-13
  • 打赏
  • 举报
回复
学习,并且来支持一下。
FranklinR 2016-07-06
  • 打赏
  • 举报
回复
学习了。
赵4老师 2016-06-22
  • 打赏
  • 举报
回复
引用 53 楼 sprint06 的回复:
哈哈哈,新人来报道啊,刚刚听了老师的课,还不错的感觉哦
理解讨论之前请先学会如何观察! 电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址; 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息…… 这辈子不看内存地址和内存值;只画链表、指针示意图,画堆栈示意图,画各种示意图,甚至自己没画过而只看过书上的图……能从本质上理解指针、理解函数参数传递吗?本人深表怀疑! 这辈子不种麦不收麦不将麦粒拿去磨面;只吃馒头、吃面条、吃面包、……甚至从没看过别人怎么蒸馒头,压面条,烤面包,……能从本质上理解面粉、理解面食吗?本人深表怀疑!! VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
Jaccio 2016-06-22
  • 打赏
  • 举报
回复
学习
ljheee 2016-06-21
  • 打赏
  • 举报
回复
sprint06 2016-06-21
  • 打赏
  • 举报
回复
哈哈哈,新人来报道啊,刚刚听了老师的课,还不错的感觉哦
1586874907 2016-06-20
  • 打赏
  • 举报
回复
szn_409 2016-06-18
  • 打赏
  • 举报
回复
学习
liuyiqi5145 2016-06-17
  • 打赏
  • 举报
回复
支持赵老师!
赵4老师 2016-06-17
  • 打赏
  • 举报
回复
引用 47 楼 liuyiqi5145 的回复:
支持赵老师!
来自00:20:27的支持我是应该感动还是应该悲哀呢? or
yshuise 2016-06-17
  • 打赏
  • 举报
回复
小样面 2016-06-16
  • 打赏
  • 举报
回复
点个赞
忘世麒麟 2016-06-16
  • 打赏
  • 举报
回复
感快报名啊米娜桑
u014229959 2016-06-16
  • 打赏
  • 举报
回复
夏小笨 2016-06-15
  • 打赏
  • 举报
回复
好久没有写过C的代码了。 学习了。
gh_99 2016-06-15
  • 打赏
  • 举报
回复
支持赵老师.
赵4老师 2016-06-15
  • 打赏
  • 举报
回复
引用 41 楼 xigua1102 的回复:
赵老师的课坚决支持,赵老师,我爱你!!
在CSDN是禁止搞基的。
xigua1102 2016-06-15
  • 打赏
  • 举报
回复
赵老师的课坚决支持,赵老师,我爱你!!
加载更多回复(39)

69,335

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧