我以前问过这个问题:Experimenting with pointers of arrays in C关于传递指向函数的指针和修改函数中的现有数组,以便将数组“返回”到main()
。我留下了一个问题,这两个代码块有什么区别?用C返回数组,不同的方法
// #includes
int ***myfunc(int***);
int main()
{
int a***;
//allocate memory for array 'a'
a = myfunc(a);
// display all contents of array 'a'
return 0;
}
OR
// #includes
void myfunc(int***);
int main()
{
int a***;
//allocate memory for array 'a'
myfunc(a);
// display all contents of array 'a'
return 0;
}
两种功能将修改阵列和当displaying all contents of a
,其内容将是相同的。
我希望这不会造成混淆,我想我可以在需要的时候阐述更多。
一个显著EDITTTTTTTTT
下面是两个工作示例(据我所知):
#include "stdlib.h"
#include "stdio.h"
void myfunc(int**);
int main() {
int **a,i, j;
a = (int**) calloc(10,sizeof(int*));
for (i=0; i<10; i++)
a[i] = (int*) calloc(10, sizeof(int));
myfunc(a);
for (i=0; i<10; i++) {
for (j=0; j<10; j++)
printf("%d ",a[i][j]);
printf("\n");
}
return 0;
}
void myfunc(int** a) {
int i, j;
for (i=0; i<10; i++)
for (j=0; j<10; j++)
a[i][j] = i*j;
}
AND ...
#include "stdlib.h"
#include "stdio.h"
// returning arrays through functions
int **myfunc(int **b);
int main() {
int **a,i,j;
a = (int**) calloc(10,sizeof(int*));
for (i=0; i<10; i++)
a[i] = (int*) calloc(10, sizeof(int));
a = myfunc(a);
for (i=0; i<10; i++) {
for (j=0; j<10; j++)
printf("%d ",a[i][j]);
printf("\n");
}
return 0;
}
int **myfunc(int **b) {
int i, j;
for (i=0; i<10; i++)
for (j=0; j<10; j++)
b[i][j] = i*j;
return b;
}
在那里做了那么多“***”? – 2011-04-24 15:40:25
我认为不同的是,在第一个版本中,至少可以保存一个'*'。如果您认为需要指向指针的指针,则可能需要重新考虑问题。 – 2011-04-24 15:45:44
3d数组。我们可以将它用于所有密集型目的 – Amit 2011-04-24 15:45:54