使劲想了几天的一个指针问题。加分啊!

wllf_4398 2001-08-13 02:43:03
不怕丑了,求各位大虾帮忙,这个二重指针的问题我想了好久了!
A **p;
A是一个自定义的STRUCT
在下理解,p是一个指针,指向一个指向A结构的指针,即,p是指向指针的指针。但此代码的说明上写道
p: vector of pointers to p vectors
我记得听人说过,定义一个二重指针相当于定义一个二维数组,即是说:
p=p[][]
有哪位大虾能帮我讲解一下吗?谢谢!
...全文
178 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
wllf_4398 2001-08-13
  • 打赏
  • 举报
回复
想了几天,晕得都不知道自己说啥了。吃了晚饭一想,终于想通。谢谢斑竹、kj_stone、Iong!!!希望以后还能向你们请教。
wllf_4398 2001-08-13
  • 打赏
  • 举报
回复
dof是一个类型,开始我写错了。:-(
TYPEDEF DOF int;
holyfire 2001-08-13
  • 打赏
  • 举报
回复
dof不是指向DOF结构的指针吗?怎么成了类型?

当然是一种类型

不过不是编译器内置的,而是你定义的,这个类型就是指向DOF结构的指针

后面的其实很简单,如果你对语法和基础知识熟悉一点,不是问题。
wllf_4398 2001-08-13
  • 打赏
  • 举报
回复
真是不好意思,烦你这么多次。
对不起,我还漏了一句:
TYPEDEF DOF int;
》“DOF *dof;
看成是一个类型”
?
dof不是指向DOF结构的指针吗?怎么成了类型?
我想把
DOF **dof;
详细地分析一下,请斑竹指正:
dof是一个指针,地址设为1000吧,该地址存放的是一个指针(设为q)的地址,不妨设为1333,然后q的地址是1333,存放的是一个EL结构的地址。
以上分析没错吧?
如果没错,dof[1]的地址为1000+1,在这个地址上怎么知道能对应一个指向DOF类型的指针呢?这又如何作为一个二维数组的索引呢?
总结一下,我还没有懂的是:1,“DOF *dof;看成是一个类型”;2。您能否举一个索引的例子(最好附代码),让我可以更清楚一些?
不管如何,深表感谢!
holyfire 2001-08-13
  • 打赏
  • 举报
回复
DOF **dof;
就是用来索引一个这个类型的数组
holyfire 2001-08-13
  • 打赏
  • 举报
回复
这里
DOF **dof;
不管是作为二维数组的索引还是别的
先将
DOF *dof;
看成是一个类型
DOF **dof;
就是一个这个类型的数组
el->dof[1]=child->dof[2];
就是数组里的值赋值的问题了
很好理解啊
wllf_4398 2001-08-13
  • 打赏
  • 举报
回复
谢谢斑竹。看来您的C语言学的不错。也谢谢其它答复的朋友。
在程序中有:
STRUCT EL
{
.......
DOF **dof;
}
然后有一段代码:
el->dof[1]=child->dof[2];
其中el,child是STRUCT EL的对象。
您能帮我再说说这段代码吗?
holyfire 2001-08-13
  • 打赏
  • 举报
回复
这可能是在上下文中说的

他的注释的意思就是说这个pointer to a pointer的作用是vector of pointers to p vectors因为他就是想用一个二重指针来索引一个二维数组,这样就不难理解了,因为一个二重指针可以用在别的方面啊
wllf_4398 2001-08-13
  • 打赏
  • 举报
回复
holyfire版主说的对,我也觉得二重指针不该是二维数组,您能帮我解答这个例子吗?谢谢!
wllf_4398 2001-08-13
  • 打赏
  • 举报
回复
首先谢谢大家的回复。
是不是我没有说清楚?想请教的是:明明p是一个指向指针(该指针指向A结构)的指针,怎么会和vector of pointers to p vectors(正解)等价呢?
在我读的这个程序中,还有类似的一段:
DOF_ADMIN **dof_admin;
其中DOF_ADMIN是自定义的STRUCT,文档中对dof_admin的说明是:
vector of dof_admins(注意是复数)
我就是搞不懂一个指向指针的指针(a pointer to a pointer which point to A/OOF_ADMIN)怎么变成vector of pointers to p vectors呢?
我晕了几天了,晚上睡觉前总想这事,求大虾相助!!!!!
holyfire 2001-08-13
  • 打赏
  • 举报
回复
>>我记得听人说过,定义一个二重指针相当于定义一个二维数组

简直是误人子弟

应该说一个二重指针可以用来索引一个二维数组就对了
kj_stone 2001-08-13
  • 打赏
  • 举报
回复
二维数组和二重指针有本质的区别。
  二维数组只是一个数组,它和一位数组没有本质的区别,只是在一位数组中加了一些标记。
它的元素还是变量(但是,<声明a[3][3]> a[1]是一个指针,它存放a[1][0]的地址)
  
 
  如果把二重指针看成一个数组,那它的每一个元素都是一个指针。
Iong 2001-08-13
  • 打赏
  • 举报
回复
定义是没问题的
出错行的意思是p用作向量(数组)
另:
指针一般是一个在32位系统里是一个32位变量
wllf_4398 2001-08-13
  • 打赏
  • 举报
回复
谢谢你的帮忙,不过,请说得更详细一点。为什么代码说明上写:p: vector of pointers to p vectors呢?
Iong 2001-08-13
  • 打赏
  • 举报
回复
好像是这样的
*p p指向结构(地址2000)
**ps ps指向p(地址1000)
这样看
ps(1000)->p(2000)->A结构
(1004)(32位)->p(x)->A结构
+8
...

69,371

社区成员

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

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