64,654
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
using namespace std;
//分配内存空间
int **a;
a=(int **)malloc(1000*sizeof(int*));
for(int iw=0;iw<1000;iw++)
a[iw]=(int*)malloc(1000*sizeof(int));
void f(int *p, int row, int col);
int main(void)
{
int a[1000][1000];
//....给数组a[][]赋值...
f(&a[0][0], 20, 30);
return (0);
}
void f(int *p, int row, int col)
{
for (int i=0; i!=row; ++i)
{
p=p+i+1;
for (int j=0; j!=col; ++j)
{
if(*p!=0)
num++;
p=p+1;
}
}
}
malloc(1000*1000*sizeof(int));//分配一次就好了
#include <iostream>
using namespace std;
typedef int a1000_i_t[1000];
void f(a1000_i_t *p, int row, int col);
int main(void)
{
a1000_i_t * a = (a1000_i_t*)malloc( 1000 * sizeof(a1000_i_t) );
//....给数组a[][]赋值...
f(&a[0][0], 20, 30);
free(a);
return (0);
}
void f(a1000_i_t *p, int row, int col)
{
for (int i=0; i!=row; ++i)
{
for (int j=0; j!=col; ++j)
{
if(p[i][j]!=0)
num++;
}
}
}
#include <iostream>
using namespace std;
void f1(int (*p)[1000], int row, int col);
void f2(int (*p)[1000][1000], int row, int col);
int main(void)
{
typedef int a_1000_1000_i_t[1000][1000];
a_1000_1000_i_t * a = (a_1000_1000_i_t*)malloc( 1000 * sizeof(a1000_i_t) );
//....给数组(*a)[][]赋值...
f1(*a, 20, 30);
f2(a, 20, 30);
free(a);
return (0);
}
void f1(int (*p)[1000], int row, int col)
{
for (int i=0; i!=row; ++i)
{
for (int j=0; j!=col; ++j)
{
if(p[i][j]!=0)
num++;
}
}
}
void f2(int (*p)[1000][1000], int row, int col)
{
for (int i=0; i!=row; ++i)
{
for (int j=0; j!=col; ++j)
{
if((*p)[i][j]!=0)
num++;
}
}
}
#include <iostream>
using namespace std;
void f(int *p, int row, int col);
int main(void)
{
typedef int a_1000_1000_i_t[1000][1000];
a_1000_1000_i_t * a = (a_1000_1000_i_t*)malloc( 1000 * sizeof(a1000_i_t) );
//....给数组a[][]赋值...
//在C中访问该数组需要(*a)[i][j]
//在C++中可以:
a_1000_1000_i_t & ra = *a;
//然后ra[i][j]
f(&(*a)[0][0], 20, 30);
//在C++中可以f(&ra[0][0], 20, 30);
//上面的代码中忘了释放:
free(a);
return (0);
}
void f(int *p, int row, int col)
{
//上面没注意到row和col都不是1000
//应该象下面这样改:
for (int i=0; i!=row; ++i)
{
int * temp = p + i * 1000;//row * col_count
for (int j=0; j!=col; ++j)
{
if(*temp!=0)
num++;
temp=temp+1;
}
}
}
#include <iostream>
using namespace std;
void f(int *p, int row, int col);
int main(void)
{
typedef int a1000_i_t[1000];
a1000_i_t * a = (a1000_i_t*)malloc( 1000 * sizeof(a1000_i_t) );
//....给数组a[][]赋值...
f(&a[0][0], 20, 30);
return (0);
}
void f(int *p, int row, int col)
{
for (int i=0; i!=row; ++i)
{
for (int j=0; j!=col; ++j)
{
if(*p!=0)
num++;
p=p+1;
}
}
}
typedef int a1000_i_t[1000];
a1000_i_t * a = new a1000_i_t[1000];
此外,f中应该有一处错误:
for (int i=0; i!=row; ++i)
{
//p=p+i+1; 这一句应该去掉,否则会越界访问
for (int j=0; j!=col; ++j)
{
if(*p!=0)
num++;
p=p+1; //这一句会被执行row * col次,足以遍历数组了。
}