可以将任何使用malloc的指针视为数组吗?

时间:2017-09-08 03:36:38

标签: c arrays malloc

所以,我现在正在学习C,并希望对某些事情做一些澄清。

我了解到,如果我们想创建动态数组,我们可以使用以下代码行:

int *arr = malloc(10 * sizeof(int));

据我所知,在这种情况下,arr是一个指针,按字节数分配相当于10个整数的数组。我也明白你可以把arr当作一个数组(从arr [0]到arr [9]。

这是否意味着所有分配内存的指针都可以视为数组?

喜欢这可以被视为一个数组吗?

int *single = malloc(sizeof(int)); 

或者可以将其视为数组吗?

int *half = malloc(sizeof(int) * 1.5)

2 个答案:

答案 0 :(得分:4)

  • 忽略数组大小,是的,所有指针都可以使用数组(意味着你可以将它们编入索引)。
  • 元素的数量应该是一个整数,截断用于有效访问(即1.5表示1项)。
  • 您从malloc请求字节数,这是项目大小的倍数。
  • 你应该读一下指针运算。
  • 数组名称也可以用作指针(例如,*数组),但您不能指定它们或修改它们(例如,++数组)。

答案 1 :(得分:1)

  

喜欢这可以被视为一个数组吗?

int *single = malloc(sizeof(int));

当然,它可以被视为数组int single[1]

  

或者可以将其视为数组吗?

int *half = malloc(sizeof(int) * 1.5)

是的,但它会与之前的代码段具有相同的效果,但您只会浪费2个额外的字节。如果你试着写一半[2],你可能会破坏一些记忆。