C - 函数中的 malloc 数组,然后从外部访问数组

标签 c

这是我如何分配一个 int var 然后在函数外部访问这个 var

int f1(int ** b) {
  *b = malloc(sizeof(int)); 
  **b = 5;
}

int main() {
  int * a;
  f1(&a);
  printf("%d\n", *a);
  // keep it clean : 
  free(a);
  return 0;
}

使用上述相同的逻辑,如何在函数内部分配一个 1 dim 数组,然后在 func 外部访问它?

请帮忙,我对数组指针有点困惑。

最佳答案

以完全相同的方式,但有一些不同的算术。你可以把你现在正在做的事情想象成用一个元素分配一个数组。只需乘以 sizeof(int)根据您希望数组具有的元素数量:

int f1(int ** b, int arrsize) {
  *b = malloc(sizeof(int) * arrsize);

  // then to assign items:
  (*b)[0] = 0;
  (*b)[1] = 1;
  // etc, or you can do it in a loop
}

int main() {
  int * a, i;
  int size = 20;

  f1(&a, size); // array of 20 ints

  for (i = 0; i < size; ++i)
      printf("%d\n", a[i]); // a[i] is the same as *(a + i)
                            // so a[0] is the same as *a

  // keep it clean : 
  free(a);

  return 0;
}

关于C - 函数中的 malloc 数组,然后从外部访问数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8437791/

相关文章:

c - OpenSSL undefined reference

c++ - 理解Visual C++的rand()函数的算法

c++ - 事务模式下的SQLite字符串管理

c - 为什么我的内核的共享内存似乎被初始化为零?

c - 我的代码不断重复,不允许用户输入

c - 在创建 RAW_SOCKET 错误时,如不允许操作

c++ - 我们可以称程序中的潜在障碍吗

c - 在c中初始化双指针的正确方法是什么

c++ - 无法从 C 代码调用 C++ 函数

c - 无效的读/写有时会产生段错误,有时不会