c - 二维指针的作用类似于二维数组

标签 c pointers multidimensional-array

在 C 中,我试图在任何函数之外声明一个二维数组,以便它可以被函数共享。我知道在单维情况下你可以执行以下操作(并使其表现得像数组):-

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

int *ptr;

int main(){
  int n=5;
  int i;

  ptr = malloc(n*sizeof(*ptr));
  for(i=0; i<n; i++){
    ptr[i] = i;
    printf("%i\n", ptr[i]);
  }
  free(ptr);
  return 0;
}

我想知道这对于多维情况如何起作用。

最佳答案

您只需使用双指针即可代替单指针:

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

int **ptr;

int main() {
  int n = 5;
  int m = 10;
  int i, j;

  ptr = malloc(n * sizeof(int*));
  for(i=0; i<n; i++) {
    ptr[i] = malloc(m * sizeof(int));
    for(j=0; j<m; j++) {
      ptr[i][j] = j;
      printf("%i\n", ptr[i][j]);
    } 
  }

  for(i=0; i<n; i++) {
    free(ptr[i]);
  }
  free(ptr);

  return 0;
}

您应该警惕的事情:

  • 单独分配每个数组
  • 单独释放每个数组,以及整个数组

关于c - 二维指针的作用类似于二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16761669/

相关文章:

c - 使用 C++ 从中缀表示法更改为后缀表示法时,输出显示不常见的字符

c++ - 查找二进制二维数组中的唯一行

从十六进制转换为 2 的补码

c - 查询编译警告(编译C程序)

c - 在 Linux 中公开共享库的自定义位置的最佳方法

c# - 表单是否像指针一样工作?

c - 使用两种不同的有符号整数二进制表示形式的程序

c++ - 接受指针参数的 GCC 纯/常量函数

php检查2级多维数组中是否存在值

c# - 编译器错误 : Invalid rank specifier: expected' ,' or ' ]' on Two Dimensional Array Initialization