Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 创建在其索引上保存指针的矩阵_C - Fatal编程技术网

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); 此代码创建

我正在考虑一种在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);
此代码创建一个变量
m
,它是指向
struct foo
的指针指针。因此,如果您将其解引用两次,您现在只需要一个
struct foo
。看起来您想要一个指向
struct foo
指针的指针——换句话说,
struct foo***m



此代码创建一个变量
m
,它是指向
struct foo
的指针指针。因此,如果您将其解引用两次,您现在只需要一个
struct foo
。看起来你想要一个指向指向
struct foo
指针的指针——换句话说,
struct foo***m
最好的解决方案确实是第二个结构,虽然你可以使用三星级的poitner
struct foo***
,但它通常不是一个好的解决方案,因为您可以始终使用
struct
s为数据提供更多的结构,并使代码不那么容易出错。

最好的解决方案确实是第二种结构,尽管您可以使用三星级的poitner
struct foo***
,但这通常不是一个好的解决方案,因为您可以始终使用
struct
s来为数据提供更多的结构,并使代码不那么容易出错。

我看不出第一种方法有什么问题。你知道你可以写
m[i]
来得到一个指针,对吗?是的,当然。但是有了m[i],我就有了一条线,可以容纳我想要的指针。假设我需要在
m[I][j]
处存储一个指针。我不能简单地做
m[I][j]=pstruct foo*
。我不知道第一种方法有什么问题。你知道你可以写
m[i]
来得到一个指针,对吗?是的,当然。但是有了m[i],我就有了一条线,可以容纳我想要的指针。假设我需要在
m[I][j]
处存储一个指针。我不能简单地做
m[I][j]=pstruct 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?@LuizEduardoF
struct foo****
是可能的,但不要这样做,你真的不想成为。@LuizEduardoF。只要阅读链接,就不容易解释当你使用
***
指针时会出现多少问题,我使用
***
指针的唯一情况是当我想传递
***
指针的地址时。使用
***
指针本身就是一个挑战。该链接实际上没有说明为什么使用三重间接寻址是不好的。就个人而言,我宁愿使用直接三重间接寻址,即双间接寻址和多余的结构或类型定义。在这种情况下,使用
***
指针是一个非常糟糕的主意,问题中缺少一些东西,但我猜最好的解决方案是另一个结构。我不知道C中的构造
struct foo***
是可能的。为什么它不好,@iharob?@LuizEduardoF
struct foo****
是可能的,但不要这样做,你真的不想成为。@LuizEduardoF。只要阅读链接,就不容易解释当你使用
***
指针时会出现多少问题,我使用
***
指针的唯一情况是当我想传递
***
指针的地址时。使用
***
指针本身就是一个挑战。该链接实际上没有说明为什么使用三重间接寻址是不好的。就个人而言,我宁愿使用直接三重间接寻址,即双重间接寻址和多余的结构或类型定义。
struct foo **m = malloc(n * sizeof *m);