C 创建在其索引上保存指针的矩阵
我正在考虑一种在C中创建指针矩阵的方法。创建矩阵很简单,如下所示:C 创建在其索引上保存指针的矩阵,c,C,我正在考虑一种在C中创建指针矩阵的方法。创建矩阵很简单,如下所示: struct foo **m = malloc(n * sizeof *m); //loop to alocate each column now 对吧? 但我不需要这个。当我执行m[I][j]时,指针被取消引用 如我所见,实现这一点的唯一方法是使用一个结构来保存所需的指针(因为我必须从m中的多个索引访问同一指针) 有没有其他解决办法 struct foo **m = malloc(n * sizeof *m); 此代码创建
struct foo **m = malloc(n * sizeof *m);
//loop to alocate each column now
对吧?
但我不需要这个。当我执行m[I][j]
时,指针被取消引用
如我所见,实现这一点的唯一方法是使用一个结构来保存所需的指针(因为我必须从m
中的多个索引访问同一指针)
有没有其他解决办法
struct foo **m = malloc(n * sizeof *m);
此代码创建一个变量m
,它是指向struct foo
的指针指针。因此,如果您将其解引用两次,您现在只需要一个struct foo
。看起来您想要一个指向struct foo
指针的指针——换句话说,struct foo***m
此代码创建一个变量
m
,它是指向struct foo
的指针指针。因此,如果您将其解引用两次,您现在只需要一个struct foo
。看起来你想要一个指向指向struct foo
指针的指针——换句话说,struct foo***m
最好的解决方案确实是第二个结构,虽然你可以使用三星级的poitnerstruct foo***
,但它通常不是一个好的解决方案,因为您可以始终使用struct
s为数据提供更多的结构,并使代码不那么容易出错。最好的解决方案确实是第二种结构,尽管您可以使用三星级的poitnerstruct foo***
,但这通常不是一个好的解决方案,因为您可以始终使用struct
s来为数据提供更多的结构,并使代码不那么容易出错。我看不出第一种方法有什么问题。你知道你可以写m[i]
来得到一个指针,对吗?是的,当然。但是有了m[i],我就有了一条线,可以容纳我想要的指针。假设我需要在m[I][j]
处存储一个指针。我不能简单地做m[I][j]=p因为m[i][i]是'struct foo',而不是struct foo*
。我不知道第一种方法有什么问题。你知道你可以写m[i]
来得到一个指针,对吗?是的,当然。但是有了m[i],我就有了一条线,可以容纳我想要的指针。假设我需要在m[I][j]
处存储一个指针。我不能简单地做m[I][j]=p因为m[i][i]是'struct foo',而不是struct foo*
。我不知道第一种方法有什么问题。你知道你可以写m[i]
来得到一个指针,对吗?是的,当然。但是有了m[i],我就有了一条线,可以容纳我想要的指针。假设我需要在m[I][j]
处存储一个指针。我不能简单地做m[I][j]=p
因为m[i][i]是'struct foo',而不是struct foo*
。在这个场景中,一个***
指针是一个非常糟糕的主意,问题中缺少了一些东西,但我想最好的解决方案是另一个结构。我不知道在C中构造struct foo***
是可能的。为什么它不好,“伊哈罗布?”路易泽杜阿尔多夫struct foo****
是可能的,但不要这样做,你真的不想成为。@LuizEduardoF。只要阅读链接,就不容易解释当你使用***
指针时会出现多少问题,我使用***
指针的唯一情况是当我想传递***
指针的地址时。使用***
指针本身就是一个挑战。该链接实际上没有说明为什么使用三重间接寻址是不好的。就个人而言,我宁愿使用直接三重间接寻址,即双间接寻址和多余的结构或类型定义。在这种情况下,使用***
指针是一个非常糟糕的主意,问题中缺少一些东西,但我猜最好的解决方案是另一个结构。我不知道C中的构造struct foo***
是可能的。为什么它不好,@iharob?@LuizEduardoFstruct foo****
是可能的,但不要这样做,你真的不想成为。@LuizEduardoF。只要阅读链接,就不容易解释当你使用***
指针时会出现多少问题,我使用***
指针的唯一情况是当我想传递***
指针的地址时。使用***
指针本身就是一个挑战。该链接实际上没有说明为什么使用三重间接寻址是不好的。就个人而言,我宁愿使用直接三重间接寻址,即双间接寻址和多余的结构或类型定义。在这种情况下,使用***
指针是一个非常糟糕的主意,问题中缺少一些东西,但我猜最好的解决方案是另一个结构。我不知道C中的构造struct foo***
是可能的。为什么它不好,@iharob?@LuizEduardoFstruct foo****
是可能的,但不要这样做,你真的不想成为。@LuizEduardoF。只要阅读链接,就不容易解释当你使用***
指针时会出现多少问题,我使用***
指针的唯一情况是当我想传递***
指针的地址时。使用***
指针本身就是一个挑战。该链接实际上没有说明为什么使用三重间接寻址是不好的。就个人而言,我宁愿使用直接三重间接寻址,即双重间接寻址和多余的结构或类型定义。
struct foo **m = malloc(n * sizeof *m);