从方法将新值设置为C中的2D数组
所以我有两个2Ds数组,我需要从一个方法中将array1的值改为array2的值。 我该怎么做?我读过关于使用指针的书,但我不明白。 如果我在方法内部打印数组,它可以工作,但外部不能从方法将新值设置为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] = { {' ',' ',' ',
#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
是如何初始化的,修改后的复制代码(包括多少&
)和打印代码。没有这些,我们只能猜测-这可能不是一个有用的练习。