从方法将新值设置为C中的2D数组

从方法将新值设置为C中的2D数组,c,C,所以我有两个2Ds数组,我需要从一个方法中将array1的值改为array2的值。 我该怎么做?我读过关于使用指针的书,但我不明白。 如果我在方法内部打印数组,它可以工作,但外部不能 #include <stdio.h> int change_array(char arr[10][10]); int print_array(char arr[10][10]); int main(){ char array1[10][10] = { {' ',' ',' ',

所以我有两个2Ds数组,我需要从一个方法中将array1的值改为array2的值。 我该怎么做?我读过关于使用指针的书,但我不明白。 如果我在方法内部打印数组,它可以工作,但外部不能

#include <stdio.h>

int change_array(char arr[10][10]);
int print_array(char arr[10][10]);

int main(){   
    char array1[10][10] = {
    {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
    {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
    {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
    {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
    {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
    {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
    {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
    {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
    {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
    {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}};

    change_array(array1);

    //if i print here arr it prints empty and not like array2
    print_array(array1);
    return 0;
}

int change_array(char arr[10][10]){

    char array2[10][10] = {
    {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
    {' ','2','2','2',' ',' ',' ','3','3','3'},
    {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
    {'4',' ',' ',' ',' ',' ',' ',' ',' ',' '},
    {'4',' ',' ',' ','6',' ',' ',' ',' ',' '},
    {' ','1',' ',' ','6',' ',' ',' ',' ',' '},
    {' ','1',' ',' ','6',' ',' ',' ',' ',' '},
    {' ','1',' ',' ',' ',' ',' ',' ',' ',' '},
    {' ',' ',' ','5','5','5','5','5',' ',' '},
    {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}};

    //i want to change the value of the array1.
    arr = array2;

    //if i print arr here its changed and the same as array2
    print_array(array2);
    return 0;
}



int print_array(char arr[10][10]){
int i,j;
for(i=0;i<10;i++){
    for(j=0;j<10;j++){
        printf(" %c", arr[i][j]);
    }
    printf("\n");
}
return 0;

}
#包括
int change_数组(char arr[10][10]);
int print_数组(char arr[10][10]);
int main(){
字符阵列1[10][10]={
{' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}};
改变_阵列(array1);
//如果我在这里打印,它会打印空的,不像array2
打印_阵列(array1);
返回0;
}
int change_数组(字符arr[10][10]){
字符阵列2[10][10]={
{' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
{' ','2','2','2',' ',' ',' ','3','3','3'},
{' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
{'4',' ',' ',' ',' ',' ',' ',' ',' ',' '},
{'4',' ',' ',' ','6',' ',' ',' ',' ',' '},
{' ','1',' ',' ','6',' ',' ',' ',' ',' '},
{' ','1',' ',' ','6',' ',' ',' ',' ',' '},
{' ','1',' ',' ',' ',' ',' ',' ',' ',' '},
{' ',' ',' ','5','5','5','5','5',' ',' '},
{' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}};
//我想更改数组1的值。
arr=array2;
//如果我在这里打印arr,它会发生变化,与array2相同
打印_阵列(array2);
返回0;
}
int-print_数组(字符arr[10][10]){
int i,j;

对于(i=0;i问题在于,在C中,无法通过值将数组传递给函数。当您为数组类型的函数声明参数时,实际上是在声明指向该数组的第一个元素的指针。同时传递数组的长度被认为是一种良好的做法,因为该函数不知道数组的长度。例如e、 当你这样写的时候:

int
change_array(char array[10][10]);
然后使用要传递的数组的名称调用该函数:

char array[10][10];
change_array(array);
这相当于传递数组第一个元素的地址:

change_array(&array[0]);
…事实上,我们可以重写这种方法的声明来反映这一点:

int
change_array(char (*array)[10]);
它告诉编译器
change\u array
需要一个指针指向您声明的二维
char
数组中的第一个子数组。由于数组下标运算符的优先级较高(
[]
),因此必须使用括号否则,编译器将期望一个指向
char
的指针数组,这可能不是您想要的

我们可以适当地重写函数的定义,如下所示:

void // Nothing significant is returned, so use `void` type
change_array(
 char (*array)[10],
 int length)
{
  // Definition for array2 here.
  (void)memcpy(
    array,      // Destination
    array2,     // Source
    length*10); // Length (in bytes)

  print_array(array);
}

您必须使用
memcpy
函数,或者在每个元素上循环并在函数中分配它,因为我们有一个指向元素的指针,而不是元素本身。请确保包含
string.h
,以便可以访问此函数。

考虑使用
memcpy()
。无法使用
=
复制数组。您所做的一切都是为了覆盖传递的指针(数组将衰减为指针)。Joaco,请尝试
memcpy(arr,array2,sizeof arrary2)
这对你有用吗?不,仍然在打印empy数组。这很奇怪,因为如果我在函数内部打印arr,它可以工作,但不在方法外部,那么你需要将问题包括在内,以便我们可以看到你在做什么。使用
memcpy()
-或
memmove()
-应该正确工作。您需要显示
阵列2
是如何初始化的,修改后的复制代码(包括多少
&
)和打印代码。没有这些,我们只能猜测-这可能不是一个有用的练习。