C++ - 使用指针表示法初始化二维数组

标签 c++ arrays pointers srand

我正在用 C++ 处理二维数组。我在连接数组和指针的概念时遇到困难。我知道它们在内存分配和访问元素方面是相关的。例如

int *arr;
int num = arr + 1*sizeof(int);

相同
int arr[];
int num = arr[1];

我试图找到二维数组和指针之间相同的联系 这是我的代码

void printGrid(int **arr) {
 for (int i = 0; i < 10; i++) {
  for (int j = 0; j < 10; j++) {
   cout << setw(3);
   cout << arr[i][j] << " ";
  }
  cout << endl;
 }
}

int main() {
 int **grid;
 srand(time(NULL));
 for (int i = 0; i < 10; i++) {
  for (int j = 0; j < 10; j++) {
   grid[i][j] = rand() % 11;
  }
 }
 printGrid(grid);
}

当我编译它时,它会编译。当我尝试运行它时,出现段错误。有人可以指出我的代码中的错误吗?

非常感谢

最佳答案

int **grid;
 srand(time(NULL));
 for (int i = 0; i < 10; i++) {
  for (int j = 0; j < 10; j++) {
   grid[i][j] = rand() % 11;
  }
 }

应该为动态数组分配内存的部分在哪里?也可能是因为它的元素?为了解决这个问题,你可以这样做

// Allocating memory for array and elements
int **grid = new int*[10];
for (int i = 0; i < 10; i++) {
  grid[i] = new int[10];
}
// Now fill the array as you had in your code
//
...
// Deletion part
for (int i = 0; i < 10; i++) {
  delete[] grid[i];
}
delete[] grid;

另外,

I'm working on 2D array in C++. I'm having trouble connecting the concepts of arrays and pointers. I know that they are related in terms of memory allocation and accessing elements. For example

int *arr; int num = arr + 1*sizeof(int);

is the same as

int arr[]; int num = arr[1];

不,它们不一样。但这是一样的:

int x[] = {0, 2, 3};
int *arr = x;
int num = *(arr + 1); //Look up pointer arithmetic; same as num=arr[1];

关于C++ - 使用指针表示法初始化二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36119514/

相关文章:

C++ 通过引用传递类中的函数

c++ - 在将几行 ruby​​ 代码转换为 C++ 时需要帮助!

c++ - 获取不同的枚举值 C++

arrays - 对几乎已排序的数组进行排序(元素错放不超过 k)

c++ - 声明指针的方法?

c - 包含包含指向自身的结构指针的 union 的结构使用 '.' 访问而不是 '->' ,混淆

c++ - "safe"在C++的消息系统设计中如何使用void指针?

java - 使用字符串数组时如何编写 lambda 表达式?

javascript - 如何通过值比较合并两个数组 - Google Analytics 和 MongoDB

c++ - 为什么即使不使用指向指针的指针作为参数调用该函数,它也能正常工作?