如何解决如何使用单个指针在C / C ++中显示2D数组
我已经搜索了,但是找不到合适的解决方案。 代码通过将数组的大小作为参数在函数中生成2D数组。 现在在main()函数中,我想要打印数组。但是输出不正确。 这就是我到目前为止所得到的。
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int * generate(int size){
int i,j;
// allocate memory
static int **X = (int **)malloc(size * sizeof(int *));
for(i=0; i<size;i++)
X[i]=(int *)malloc(size * sizeof(int));
for(i=0; i<size;i++)
for(j=0;j<size;j++)
X[i][j]=rand()%1000;
return *X;
}
int main(){
srand(time(NULL));
int size=3;
int *p=generate(size);
for(int i=0; i<size; i++){
for(int j=0; j<size;j++){
printf("%5d ",(*(p+i)+j));
}
printf("\n");
}
return 0;
}
解决方法
与C ++相比,这更像C,但是:
在generate中使用malloc(size*size*sizeof(int))
或更改generate
以返回int**
而不是int*
。 (在您的情况下,generate返回* X,而您只得到第一行)。
使用第一种方法,您将获得连续的内存空间,而使用第二种方法,您将获得不连续的内存空间。
,您可能会在此之后吗?
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int** generate(int size) {
int i,j;
int ** X = (int **) malloc(sizeof(int*) * size );
for (i = 0; i < size; i++)
X[i] = (int*) malloc(sizeof(int) * size);
for (i = 0; i < size; i++)
{
for (j = 0; j < size; j++)
{
X[i][j] = rand() % 1000;
printf("%5d",X[i][j]);
}
printf("\n");
}
return X;
}
int main() {
srand(time(NULL));
int size = 3;
int** p = generate(size);
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
printf("%5d ",p[i][j]);
}
printf("\n");
}
//DONT FORGET TO FREE
for (int i = 0; i < size; i++)
{
int* currentp = p[i];
free(currentp);
}
return 0;
}
如果您想遍历j + i的元素,我认为您需要重新考虑如何阅读索引。例如,如果您阅读**(p + i),您将获得每一行的第一个元素,但是我不确定您是否知道如何为剩余的空间分配内存(我不确定该如何使查找变得容易)对于元素为j + i)。如果您想这样做,我怀疑您需要将数组全部分配为size * size,以便确保索引的连续性...
(上面的代码和后面的注释基本上是StPiere提出的要点)
此外,作为一项建议检查this post(关于为什么在C ++中使用malloc()/ free()不太好)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。