小编Mih*_*nea的帖子

在 C 和 C++ 中作为函数参数的 int **a 和 int a[][] 之间的确切区别是什么?

我在用矩阵编写程序时遇到过这个问题,我曾经int** m声明我的矩阵 - 因为我需要动态分配,并且在我使用的函数中int a[][]。我不记得有任何问题。但是当我使用一个简单的m[6][6]矩阵时,f(int**m, int** m2, rest params)我遇到了麻烦。

它编译了,当我运行程序(带有 GCC 的代码块)时,它就崩溃了。我尝试通过添加printf()s 进行调试,但它在一个if()没有意义的块上崩溃了。从int a[][]to修改第一个函数参数int* a[6]并继续,稍后修改第二个参数,我的程序在第一次尝试时运行。通过更仔细地调试我保存的内容int m[i][j]并检查是否是垃圾值,而不是我放入的内容,我只是放入10标记某些东西。

这么多年过去了,除非我在做这样的事情时被 GCC 编译错误,否则我只会写第一个想到的方法。

在所有 4 种组合中使用int**int [][]声明变量/获取函数参数背后的逻辑是什么?我使用的大多数预定义函数都int**在函数头文件中使用。

我知道int [][]不等于int**,它是int* []正确的,但是我缺少什么?int[][]是多维数组意味着数组的数组,所有 3 种编写方式似乎都相同。因为int[][]它几乎总是要求只让第一个参数无效,就像int array[][][][]我需要将 int 数组a[][n1][n2][n3]放在函数参数中一样,对吧?它需要知道除第一个以外的多维数组的维数,因为在声明函数参数时可以毫无问题地使用int*andint[]吗?

c c++ parameters pointers function

4
推荐指数
3
解决办法
410
查看次数

标签 统计

c ×1

c++ ×1

function ×1

parameters ×1

pointers ×1