数组与指针的艺术--深入探索c/c++数组与指针的奥秘

飞天御剑流 2009-11-23 11:52:55
加精
  一直以来想把2005年写的《再再论指针》修改一下,因为经过了这么多年,对C/C++的理解与05年相比又有了一些进展。但公司的工作一直很忙,没有时间进行修改工作。直到10月初的长假,才开始。从放假到现在过去两个月了,一直利用空闲时间断断续续地修改,共写了两万字,十章节。偶不是作家,两万字对偶来说已经是极限中的极限了,没有功劳也有苦劳,没有苦劳也有疲劳吧,不过总算把这几年来对数组与指针的心得写成了一系列文章,当然限于偶的水平,存在错误无法避免,希望跟各位朋友一起,共同讨论,共同进步!

前言:http://blog.csdn.net/supermegaboy/archive/2009/11/23/4855036.aspx
第一章:数组与指针概念剖析 http://blog.csdn.net/supermegaboy/archive/2009/11/23/4855027.aspx
第二章:数组名是一个指针常量吗?http://blog.csdn.net/supermegaboy/archive/2009/11/23/4855018.aspx
第三章:数组的解剖学http://blog.csdn.net/supermegaboy/archive/2009/11/23/4855010.aspx
第四章:[]运算符的本质http://blog.csdn.net/supermegaboy/archive/2009/11/23/4855000.aspx
第五章:字符串字面量---一个特殊的数组http://blog.csdn.net/supermegaboy/archive/2009/11/23/4854987.aspx
第六章:指针与consthttp://blog.csdn.net/supermegaboy/archive/2009/11/23/4854974.aspx
第七章:右左法则----复杂指针解析http://blog.csdn.net/supermegaboy/archive/2009/11/23/4854965.aspx
第八章:柔性数组成员http://blog.csdn.net/supermegaboy/archive/2009/11/23/4854939.aspx
第九章:C99可变长数组VLA详解http://blog.csdn.net/supermegaboy/archive/2009/11/23/4854921.aspx
第十章:动态数组http://blog.csdn.net/supermegaboy/archive/2009/11/23/4854899.aspx
...全文
57939 1147 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1147 条回复
切换为时间正序
请发表友善的回复…
发表回复
J_C_Peng 2012-10-22
  • 打赏
  • 举报
回复
好东西,顶
_暮落_ 2012-10-22
  • 打赏
  • 举报
回复
不错.
赵4老师 2012-10-11
  • 打赏
  • 举报
回复
电脑内存只是一个一维二进制字节数组及其对应的二进制地址;
人脑才将电脑内存中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是很多数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、……
cds0564 2012-10-11
  • 打赏
  • 举报
回复
对我这个新手来说还是有点难~~~
飞天御剑流 2012-09-28
  • 打赏
  • 举报
回复
[Quote=引用 1341 楼 的回复:]

引用 1339 楼 的回复:

这辈子不看内存地址和内存值;只画链表、指针示意图,画堆栈示意图,画各种示意图,甚至自己没画过而只看过书上的图……能从本质上理解指针、理解函数参数传递吗?本人深表怀疑!
这辈子不种麦不收麦不将麦粒拿去磨面;只吃馒头、吃面条、吃面包、……甚至从没看过别人怎么蒸馒头,压面条,烤面包,……能从本质上理解面粉、理解面食吗?本人深表怀疑!!


一辈子都没有拿过……
[/Quote]
对赵未定义行为大师这个人啊,偶早就无所谓了,就让他抱着他的疑问进坟墓吧,这是对他最好的报应了。
xspace_time 2012-09-27
  • 打赏
  • 举报
回复
再修改一下
#include <stdio.h>

int main()
{
int a=(int)"helloworld";
printf("%s\n",a);
}
iamnobody 2012-09-27
  • 打赏
  • 举报
回复
[Quote=引用 1339 楼 的回复:]

这辈子不看内存地址和内存值;只画链表、指针示意图,画堆栈示意图,画各种示意图,甚至自己没画过而只看过书上的图……能从本质上理解指针、理解函数参数传递吗?本人深表怀疑!
这辈子不种麦不收麦不将麦粒拿去磨面;只吃馒头、吃面条、吃面包、……甚至从没看过别人怎么蒸馒头,压面条,烤面包,……能从本质上理解面粉、理解面食吗?本人深表怀疑!!
[/Quote]

一辈子都没有拿过铲子, 没有在太阳下拌过水泥 , 只是在纸上画各种的工程图,做各种评估,各种计算的人, 能够设计房子吗?

飞天御剑流 2012-09-27
  • 打赏
  • 举报
回复
[Quote=引用 1337 楼 的回复:]

再修改一下
#include <stdio.h>

int main()
{
int a=(int)"helloworld";
printf("%s\n",a);
}
[/Quote]
这是未定义行为,并不能说c/c++无所谓指针不指针,printf是不进行类型检查的,这是printf的特性,标准库的设计者并不认为应该强制进行类型检查。
赵4老师 2012-09-27
  • 打赏
  • 举报
回复
这辈子不看内存地址和内存值;只画链表、指针示意图,画堆栈示意图,画各种示意图,甚至自己没画过而只看过书上的图……能从本质上理解指针、理解函数参数传递吗?本人深表怀疑!
这辈子不种麦不收麦不将麦粒拿去磨面;只吃馒头、吃面条、吃面包、……甚至从没看过别人怎么蒸馒头,压面条,烤面包,……能从本质上理解面粉、理解面食吗?本人深表怀疑!!
xspace_time 2012-09-26
  • 打赏
  • 举报
回复
拜读楼主的博大 希望可以到你的资源里下载一份chm版的

最后不敢恭维 c语言里没有什么指不指针

#include <stdio.h>

int main()
{
int a;
char p[]="helloworld";
a=(int)p;
printf("%s\n",(char*)a);
}
飞天御剑流 2012-09-26
  • 打赏
  • 举报
回复
[Quote=引用 1332 楼 的回复:]
看了一点
很好奇


C/C++ code
int main( void ){
static int a[10], b[10];
int c[10], d[10];
int* e[] = { a, b }; /* A */
int* f[] = { c, d }; /* B */
return 0;
}


是……
[/Quote]
vc对标准的支持太差,可使用gcc -pedantic -errors或者Comeau C等对标准支持度较高的编译器。
冷月清晖 2012-09-26
  • 打赏
  • 举报
回复
[Quote=引用 45 楼 的回复:]

引用 23 楼 baihacker 的回复:
引用 21 楼 oufengmorpheus 的回复:
引用 10 楼 zhao4zhong1 的回复:
没把C和汇编的关系弄清楚,怎么能认清指针的本质呢?


点中要害。。。

等supermegaboy说...


从汇编的角度去说明C/C++的指针,是犯了方向性错误。c/c++的指针是更高层的抽象,汇编的指针只有一些诸如长……
[/Quote]

zhao4zhong1 是来灌水的,别理他。
海绵宝宝U 2012-09-26
  • 打赏
  • 举报
回复
LZ的东西 看了一遍 还得继续 看第二遍 、
估计看完第二遍 还得看第三遍 、
lin5161678 2012-09-26
  • 打赏
  • 举报
回复
看了一点
很好奇

int main( void ){
static int a[10], b[10];
int c[10], d[10];
int* e[] = { a, b }; /* A */
int* f[] = { c, d }; /* B */
return 0;
}


是怎么不能通过编译的
sunxkd 2012-09-26
  • 打赏
  • 举报
回复
好东西~~帮顶~~
windppt 2012-09-23
  • 打赏
  • 举报
回复
收藏收藏
yaya_lucky 2012-09-12
  • 打赏
  • 举报
回复
mark 了, 慢慢看
shirui8653719 2012-09-12
  • 打赏
  • 举报
回复
楼主很强大啊。
图灵狗 2012-09-06
  • 打赏
  • 举报
回复
非常厉害,强烈支持!
赵4老师 2012-09-06
  • 打赏
  • 举报
回复
为什么要有数据结构这个东东?
因为要将现实世界或者抽象理论中的各种数据保存在计算机外存(光盘、硬盘、U盘……)或内存(ROM、RAM、SRAM……)里面的二进制字节数组中。
然后让CPU这个只会执行预先保存好的加减乘除移位条件转移……等机器指令的家伙按照人的意志去处理这些数据。
加载更多回复(1130)

65,180

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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