k******i 发帖数: 5774 | 1 关于内存和访问效率
int [M*N]
跟
int [M][N]
占用内存一样?访问效率一样?不是吧?
还有在C跟JAVA,乃至C#里面的结论是一样的吗?
谢谢各位~ |
d****n 发帖数: 1637 | 2 不一样。
速度都查不多。
如果function declare 里面,有最大栈深度限制。
【在 k******i 的大作中提到】 : 关于内存和访问效率 : int [M*N] : 跟 : int [M][N] : 占用内存一样?访问效率一样?不是吧? : 还有在C跟JAVA,乃至C#里面的结论是一样的吗? : 谢谢各位~
|
t****t 发帖数: 6806 | 3 C/C++里, 占用内存一样, 访问效率一样.
【在 k******i 的大作中提到】 : 关于内存和访问效率 : int [M*N] : 跟 : int [M][N] : 占用内存一样?访问效率一样?不是吧? : 还有在C跟JAVA,乃至C#里面的结论是一样的吗? : 谢谢各位~
|
k******i 发帖数: 5774 | 4 3ks~
【在 t****t 的大作中提到】 : C/C++里, 占用内存一样, 访问效率一样.
|
r********n 发帖数: 7441 | 5 一回事,c++中 a[][]和a[]的实现都是居于 a 的指针运算
【在 k******i 的大作中提到】 : 关于内存和访问效率 : int [M*N] : 跟 : int [M][N] : 占用内存一样?访问效率一样?不是吧? : 还有在C跟JAVA,乃至C#里面的结论是一样的吗? : 谢谢各位~
|
d****i 发帖数: 4809 | 6 对,唯一不同的是如果作为函数的参数,那么在函数中dereference的时候,用二维数
组可以写成(更直观一些):
void addMatrix(int **a, int **b, int row, int col)
{
for(i=0;i
for(j=0;j
a[i][j] += b[i][j];
}
用一维数组可以写成:
void addMatrix(int *a, int *b, int row, int col)
{
for(i=0;i
for(j=0;j
a[i*row+j] += b[i*row+j];
}
【在 t****t 的大作中提到】 : C/C++里, 占用内存一样, 访问效率一样.
|
X****r 发帖数: 3557 | 7 你这个不是二维数组(数组的数组),而是指针数组(指向子数组首元素指针的数组)
,空间效率和时间效率上和二维数组并不等价。
【在 d****i 的大作中提到】 : 对,唯一不同的是如果作为函数的参数,那么在函数中dereference的时候,用二维数 : 组可以写成(更直观一些): : void addMatrix(int **a, int **b, int row, int col) : { : for(i=0;i : for(j=0;j: a[i][j] += b[i][j]; : } : 用一维数组可以写成: : void addMatrix(int *a, int *b, int row, int col)
|
d****i 发帖数: 4809 | 8 说得对,就是这种方式比直接用二维数组作为参数要灵活,直接用二维数组作为形参的
话,就只能把第二维固定的二维数组来传递:
void addMatrix(int a[][NUM_COL], int b[][NUM_COL], int row)
{
for(i=0;i
for(j=0;j
a[i][j] += b[i][j];
}
【在 X****r 的大作中提到】 : 你这个不是二维数组(数组的数组),而是指针数组(指向子数组首元素指针的数组) : ,空间效率和时间效率上和二维数组并不等价。
|