//void *memcpy(void *dest, const void *src, size_t n);从源src所指的内存地址的起始位置开始拷贝n个
//字节到目标dest所指的内存地址的起始位置中。调用该函数需要引用string.h头文件.
int a[M][N], b[M][N];
memcpy(b, a, sizeof(a));
/////////////////////////////////////////结构体中二维数组的memcpy//////
memcpy(cl_ctx->wq[0], ctx->wq[0], sizeof(cl_ctx->wq[0]));//指针在64位系统占8个字节,ctx->wq[1]是指针,因此sizeof(ctx->wq[1])=8,故不可用
memcpy(cl_ctx->wq[1], ctx->wq[1], sizeof(cl_ctx->wq[1]));
//或者
memcpy(&cl_ctx->wq[0][0], &ctx->wq[0][0], sizeof(cl_ctx->wq));
memcpy(cl_ctx->wq, ctx->wq, sizeof(cl_ctx->wq));
//均可以.
//但是如果两个结构体中第一个是wq[2][64],另一个是*wq[2],则只能使用上面的两个对每个维度单独赋值,因为*wq[2]的第二维可能不是64.
///////////结构体数组的memcpy///////////////////////////////////////////////////
typedef struct _CL_CORE{
ENC_SBAC s_curr_before_split[MAX_CU_DEPTH][MAX_CU_DEPTH];
ENC_SBAC s_curr_best[MAX_CU_DEPTH][MAX_CU_DEPTH];
ENC_SBAC s_next_best[MAX_CU_DEPTH][MAX_CU_DEPTH];
ENC_CU_DATA cu_data_best[MAX_CU_DEPTH][MAX_CU_DEPTH];
ENC_CU_DATA cu_data_temp[MAX_CU_DEPTH][MAX_CU_DEPTH];
}CL_CORE;
memcpy(&cl_core->s_curr_before_split[0][0], &core->s_curr_before_split[0][0], sizeof(cl_core->s_curr_before_split));
memcpy(cl_core->s_curr_before_split, core->s_curr_before_split, sizeof(cl_core->s_curr_before_split));
例一:
#include
#include
#include
void printarr2d(int (*a)[3],int row,int col);
int main()
{
int i,j;
int a[2][3] = {{1,2,3},{4,5,6}};
int b[4][3] = {{0,0,0},{0,0,0}};
memcpy(b[2],a,sizeof(int)*2*3);//b[2]代表以b[2]为起始地址开始赋值
printarr2d(b,4,3);
return 0;
}
/***********************************************
打印显示数组
************************************************/
void printarr2d(int (*a)[3],int row,int col)
{
int i,j;
for(i=0; i|
例二:
#include"string.h"
#include"stdio.h"
int main(void)
{
int i,j;
int a[2][3]={{1,2,3},{4,5,6}};
int b[2][3];
memcpy(&b[0][0],&a[0][0],24);
printf("%d",b[1][0]);
}
例三:
#include
void print(int *data,size_t m,size_t n); //二维数组显示子函数
int main(void)
{
int src[][3]={{1,2,3},{4,5,6},{7,8,9},{1,2,3},{4,5,6},{7,8,9}};
int des[6][3]={0,0};//要小心,行数固定
printf("%d",sizeof(src));
print(src,6,3);
memcpy(des,src,sizeof(src));
print(des,6,3);
return 1;
}
//二维子函数显示功能
void print(int data[][3], size_t m,size_t n)
{
int i,j;
printf("\n");
for(i=0;i
https://blog.csdn.net/fengxinlinux/article/details/51541003
方法一:利用二级指针申请一个二维数组。
#include
#include
int main()
{
int **a; //用二级指针动态申请二维数组
int i,j;
int m,n;
printf("请输入行数\n");
scanf("%d",&m);
printf("请输入列数\n");
scanf("%d",&n);
a=(int**)malloc(sizeof(int*)*m);
for(i=0;i
方法二:用数组指针形式申请一个二维数组。
#include
#include
int main()
{
int i,j;
//申请一个3行2列的整型数组
int (*a)[2]=(int(*)[2])malloc(sizeof(int)*3*2);
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
{
printf("%p\n",&a[i][j]); //输出数组每个元素地址,每个元素的地址是连续的
}
}
free(a);
return 0;
}
方法三:用一个单独的一维数组来模拟二维数组。
#include
#include
int main()
{
int nrows,ncolumns;
int *Array;
int i,j;
printf("please input nrows&ncolumns:\n");
scanf("%d%d",&nrows,&ncolumns);
Array=(int *)malloc(nrows*ncolumns*sizeof(int)); //申请内存空间
for(i=0;i