一个多级指针的问题

shenxin197735 2008-10-31 05:15:28
int (*a[5][4])[3][8];
int b[6][3][8];
a[3][2]=b;

int (*(*p)[4])[3][8];
p=a;
p[3][2][1][2][3]=100;

不要调试,判断出哪一句错了?

本人是一个具有几年C++编程经验的,最近把C++语法从头夯实一遍,至今才敢说是一名C++高手。
我很鄙视有些C++程序员,连基本的指针概念都很混乱还敢做程序员,以上的题目我想搞C++的没几个人能弄明白,更别说灵活运用了,指针是C的灵魂,劝你们回家好好研究研究吧,哈哈哈哈哈
这才是2级指针的例子,n多级的你们还不得跟看天书似的。

我就不明白,有些人不懂这些也敢做C程序,真实拿c当basic用呀,C&C++是用来搞底层的东西的,不是让你们用来画界面调接口的,不自己用C写数据结构跟没学一样,链表,树这些基本的数据结构你们自己写过吗,没写过还敢出来混,就知道用现成的类库,调用这个调用那个的就以为自己懂C了,还敢出来挣钱,真他妈的不知天高地厚。

我发这贴目的就是为了劝那些学C的知难而退吧,你搞不懂上面的代码永远进不了C的大门,回家改学basic或者java吧
...全文
151 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
flymoon99 2008-11-03
  • 打赏
  • 举报
回复
过来膜拜楼主的,不做回答
RedskyDeng 2008-10-31
  • 打赏
  • 举报
回复
mark,lz怎么一个帖子到处发?
lzg0001 2008-10-31
  • 打赏
  • 举报
回复
本人只是一个月薪 2.5 K 的小程序员,纯粹学习,请楼主在结贴前公布一下您的分析,也给我们一个提高的机会!
lzg0001 2008-10-31
  • 打赏
  • 举报
回复
本人不是高手,试着答一下,请高手指点:

int (*a[5][4])[3][8];
一种指针类型,指向一个"[5][4]"类型数组,在此定义了此指针类型的一个数组“[3][8]”,即 a[x][x] 是一个指针,指向一个“[5][4]”类型数组的首地址。
等同于:
typedef int (*A)[5][4];
A a[3][8];

int b[6][3][8]; 一个普通的三级数组。

a[3][2]=b;
a[x][x] 指向一个“[5][4]”类型数组,此处不应指向三级数组,且 [3] 本身溢出。

int (*(*p)[4])[3][8];
等同于:
typedef int (*Type1)[4];
typedef Type1 * Type2;
Type2 [3][8];

p=a;
只考虑 "*a[5][4]"、"*(*p)[4]",前者是指向一个二维数组,后者则是指向另一个“指向一维数组指针”的指针,两者不饱和度级数是相同的,但意义不同,即使编译通过,运行也不正常。

p[3][2][1][2][3]=100;
不考虑此处第一个[3]的内存溢出错误。
p[3][2] 是一个 "*(*p)[4]" 类型,p[3][2][1] 是一个 "(*p)[4]", p[3][2][1][2] 是一个一维数据指针,p[3][2][1][2][3] 是一个 int 类型。
sherrik 2008-10-31
  • 打赏
  • 举报
回复
LZ很批判啊
snowshow 2008-10-31
  • 打赏
  • 举报
回复
搬板凳,看大戏^_^
shenxin197735 2008-10-31
  • 打赏
  • 举报
回复
做了7、8年VC开发,有些话不得不说,很多搞C++的也有几年工作经验了,月薪7、8千真不少了,可有一部分人真是混吃的,连一些基本的C++语法都搞不清,处理个字符串都得折腾半天,用到个链表还要到处找资料找代码,内存泄漏从来不是他们考虑的问题,线程根本就没有同步这个概念,做一个项目,bug像天上的星星一样多,改了一个bug,又出来两个bug,做了一两年,项目还是基本不能用,有这工夫微软windows都更新换代了,公司都快被这些人搞垮了,然后他们一拍屁股走人,找下个公司接着混,留下那些烂代码可苦了接手的人。
奉劝那些同行的SB们,你们积点德吧,不要再C++行业捣乱了,滚出去吧。
还有那些准备学C的,如果觉得C很难就改学别的吧,不要强努,做C程序员是要有天赋的,没这个慧根就算了吧,省得祸害千年
shenxin197735 2008-10-31
  • 打赏
  • 举报
回复
自己回答一下
int (*a[5][4])[3][8]; //分配了一个[5][4]长度的数组,数组元素是(*)[3][8]类型的指针
int b[6][3][8];//定义一个[6][3][8]的int型数组,其等价的指针类型为(*)[3][8]
a[3][2]=b; //把数组a的第[3][2]个元素赋值为b,因为显然a[3][2]是a数组里一个元素,元素类型为(*)[3][8],所以可以用b来赋值

int (*(*p)[4])[3][8]; //定义一个2级指针,此指针和数组a在类型上也是等价的
p=a;//所以可以用a赋值
p[3][2][1][2][3]=100;//p[3][2][1][2][3]实际等价于b[1][2][3],注意前面[3][2]是一个基地址,后面的[1][2][3]是另一个基地址,虽然形式上可以连续写成[3][2][1][2][3]但是中间有一次寻址跳转的,这也说明了p是一个2级指针

所以以上都没有错误的

可能大多数人即使看了我的说明还是一头雾水,所以劝你们不要学C了,该干嘛干嘛去吧

这种问题可不是哗众取宠,编写复杂数据结构就要用到这些,还是虚心点吧。

我已经可以把指针运用的行云流水了,2级3级4级...100级的不在话下,很是兴奋,仅此而已。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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