【问题标题】:Pointer arithmetic to fill dynamically allocated array in C [closed]在C中填充动态分配数组的指针算法[关闭]
【发布时间】:2013-04-02 03:04:02
【问题描述】:

我使用 malloc 分配了一个数组,然后尝试使用 for 循环和指针算法填充它,但由于某种原因它不起作用。

int* myArray = (int*)malloc(100*sizeof(int));

for (int i = 0; i < 100 ; i++)
{
    *myArray = i;
    myArray++;      
}

【问题讨论】:

  • 您能解释一下什么不起作用吗?
  • 通常在初始化指针后,您不会添加到它以递增数据。通常你只需要myArray[ELEMENT] = val。指针就像数组一样工作。只是一个想法。
  • 你应该在 for 循环之外声明 i。
  • 它正在工作。您是否期望指针myArray 在循环后与循环前具有相同的值???
  • @Quirliom:为什么?这是有效的 C99 和 C11 代码。

标签: c pointers dynamic malloc allocation


【解决方案1】:

当您执行myArray++ 时,您会丢失指向已分配内存的原始指针。

相反,您可能应该这样做:

*(myArray + i) = i;

或者甚至只是使用普通的数组索引:

myArray[i] = i;

【讨论】:

  • 是的,索引很好,我最初是这样写的,只是想尝试指针。谢谢,我没有意识到我正在推进指针,但至少没有创建一个临时位置来保持初始位置。现在可以了。
  • +1 超级简单的答案。 myArray[ELEMENT] 格式使用更广泛,因为当在 *(myArray + ELEMENT ...) 中添加额外的算术时会变得草率。
猜你喜欢
  • 2018-09-07
  • 1970-01-01
  • 1970-01-01
  • 2020-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-16
相关资源
最近更新 更多