我有这个代码示例,但我不明白为什么要更改数组里面的值
outputUsingArray()
正在更改原始数组。
我原本希望在outputUsingArray()
中更改数组的值只能用于数组的本地副本。
为什么不是这样?
然而,这是我想要的行为,但我不明白为什么会这样做。
#include <stdlib.h>
#include <stdio.h>
void outputUsingArray(int array[][4], int n_rows, int n_cols) {
int i, j;
printf("Output Using array\n");
for (i = 0; i < n_rows; i++) {
for (j = 0; j < n_cols; j++) {
// Either can be used.
//printf("%2d ", array[i][j] );
printf("%2d ", *(*(array+i)+j));
}
printf("\n");
}
printf("\n");
array[0][0] = 100;
array[2][3] = 200;
}
void outputUsingPointer(int (*array)[4], int n_rows, int n_cols) {
int i, j;
printf("Output Using Pointer to Array i.e. int (*array)[4]\n");
for (i = 0; i < n_rows; i++) {
for (j = 0; j < n_cols; j++) {
printf("%2d ", *(*(array+i) + j ));
}
printf("\n");
}
printf("\n");
}
int main() {
int array[3][4] = { { 0, 1, 2, 3 },
{ 4, 5, 6, 7 },
{ 8, 9, 10, 11 } };
outputUsingPointer((int (*)[4])array, 3, 4);
outputUsingArray(array, 3, 4);
printf("0,0: %i\n", array[0][0]);
printf("2,3: %i\n", array[2][3]);
return 0;
}
答案 0 :(得分:4)
传递int []实际上是将指针传递给数组的第一个元素 传递int *也是将指针传递给数组的第一个元素。
他们是完全相同的。
由于它们都指向内存的同一部分,因此更改一个将改变另一个。
答案 1 :(得分:0)
C / C ++中的数组不是按值传递的。即,将数组作为参数传递时,不会涉及复制。 ie array
只是一个引用传递数组的名称。
答案 2 :(得分:0)
C / C ++中的数组实际上只是指针(数学为你完成)。除非您明确地复制数组的内容,否则传递数组只会传递指向第一个元素的指针。
因此,当您基于该基指针修改数组时,您将修改原始数组内容。
答案 3 :(得分:0)
#include<stdio.h>
#include<stdlib.h>
void showArray(double** theArray,int arraySizeX, int arraySizeY){
int index,index2;
for(index=0;index<arraySizeX;index++){
for(index2=0;index2<arraySizeY;index2++){
printf("The valyee of arr[%d][%d] is %lf \n",index,index2,theArray[index][index2]);
}
}
}
void setArray(double** theArray,int arraySizeX, int arraySizeY){
int index,index2;
for(index=0;index<arraySizeX;index++){
for(index2=0;index2<arraySizeY;index2++){
theArray[index][index2]=index+index2;
}
}
}
void main()
{
int i, arraySizeX =3,arraySizeY=4;
double** theArray;
theArray = (double**) malloc(arraySizeX*sizeof(double*));
for ( i = 0; i < arraySizeX; i++) {
theArray[i] = (double*) malloc(arraySizeY*sizeof(double));
}
printf("*****************************\n");
showArray(theArray, arraySizeX, arraySizeY);
printf("*****************************\n");
setArray(theArray, arraySizeX, arraySizeY);
printf("__________________________________\n");
showArray(theArray, arraySizeX, arraySizeY);
printf("__________________________________\n");
free(theArray);
}
我希望这有帮助,