int *p[5]和通过malloc获得的指针有什么区别?

问题描述 投票:-1回答:1

我似乎不明白int *p[5]和通过malloc获得的指针之间的区别。

int *p[5]

int *p;
p = (int*)malloc(sizeof(int)*5);

我刚开始学习C-ANSI指针,基本的知识我都懂,但是直到几个小时前我还以为前面两行是等价的。

我知道第1行是一个int类型的指针数组(能够存储5个int指针),但是最后一行不是一样吗?

还是换一种写法。

int arrayX[5];
int *p;
p = arrayX;

但却是动态分配的?

先谢谢你了。

c arrays pointers
1个回答
2
投票

int *p[5] 声明一个5个指针的数组,类型为 int. 所以.., p[0] 本身就是一个指向 int (也是 p[1], p[2], p[3], p[4]). 那就.., p[i][0] 会有 int 值(假设 p[i] 指向某个分配的内存区域)。) 根据内存的多少 p[i] 指向,你将能够访问一些。int 值,通过 p[i][j].

当你打电话给 malloc(),你要求足够的内存来容纳 sizeof(int) * 5 字节,基本上是5 int 值。 如果分配没有失败。malloc() 返回一个指向该分配内存的指针。 所以,当你写

    int *p = malloc(sizeof(int) * 5);

p 是一个指向内存区域的指针,这个区域已经被分配给存储5。int 值。 因此: p[0], p[1], p[2], p[3], p[4] 都有 int 值。

总之:

    int *p[5];    /* p[i] is a POINTER to INT, and p[i][j] is an INT */
    int *p = malloc(sizeof(int) * 5);    /* p[i] is an INT */
© www.soinside.com 2019 - 2024. All rights reserved.