gpt4 book ai didi

c - 无法通过分配给指针来访问二维数组

转载 作者:行者123 更新时间:2023-12-02 01:01:38 24 4
gpt4 key购买 nike

我正在尝试通过分配给指针来打印二维数组。有了这个我可以很好地打印一维,但二维会导致段错误。

void printOutput(int **array,int row, int col)
{
int i = 0, j = 0;
int dualArray[2][2] = {{1,2},{3,4}};
int singleArray[]={1,2,3};
int *sa = singleArray;

printf ("Output values :\n");
for(i=0;i<3;i++)
printf("%d ",sa[i]);
printf("\n");

int **da = dualArray;

for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
printf("%d ",da[i][j]);
}
printf("\n");
}
}

Output values :
1 2 3
Segmentation fault (core dumped)

如果我可以通过分配int *sa = singleArray; 访问一维数组 (sa)(我可以打印sa[ i]),那为什么我不能访问一个二维数组 (da) int **da = dualArray;?我在访问 2D 数组 时遇到段错误。

请哪位知道原因。谢谢。

最佳答案

#include<stdio.h>
#include<stdlib.h>

int main()
{
int row=2,col=3;
int i = 0, j = 0;
int dualArray[2][3] = {{1,2,5},{3,4,6}};
int singleArray[]={1,2,3};
int *sa = singleArray;

printf ("Output values :\n");
for(i=0;i<3;i++)
printf("%d ",sa[i]);
printf("\n");

int **dda; //Double pointer

int *da[2]; //It is array of two pointer
//Means it will store two elements, which will be some pointer themselves

dda=da; //array name is pointer to first element so here dda is pointing to first element of da
int (*ss)[3]=dualArray; //Here ss is pointer to array of 3 element
da[0]=ss; //am storing this pointer at da[0], comprising of first row
ss=ss+1; //Now ss is incremented, it will increment by its size.
//sizeof(*ss) is 12 bytes, 3elements x sizeof(int)
da[1]=ss; //So now ss points to second row,
//Pointer to second row is stored in da[1]


for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
printf("%d ",*(*(dda+i)+j)); //de-referencing twice to get the element as done in @D array
} //But here dda double pointer
printf("\n");
}


}

这里我已经将你的代码修改为main函数,这样你就可以直接运行它并查看它的输出。

考虑以下会有所帮助的事情。

1.双指针主要用于在声明时我们不知道二维数组的实际大小,而我们是动态生成的。

2.当一个二维数组被传递给一个函数时,它会衰减到指向数组的指针;即指向元素数组的指针,因为一行中有列。因此,指向第一行数组的指针被传递给我们接收它的函数。

3.正如我上面所说的,二维数组不是作为指向指针的指针传递的,而是作为指向数组的指针传递的(你也可以认为函数应该知道行中有多少列?如果你只是传递双指针。它怎么知道??)

4.为了在你使用的函数中说明双指针,我做了一些我也解释过的更改..

5.我采用了双指针dda,它指向指针数组da,它有两个元素,它们本身就是指针。

其余的我已经通过程序中的注释进行了解释。

也许这会有所帮助。

关于c - 无法通过分配给指针来访问二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50080050/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com