我似乎不明白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;
但却是动态分配的?
先谢谢你了。
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 */