C用malloc创建数组

如果从堆上分配内存并把地址赋给一个指针,那就肯定可以对指针使用数组下标并把这块内存当成一个数组。在下面的代码中,我们复制之前用过的数组vector中的内容:

int *pv = (int*) malloc(5 * sizeof(int));
for(int i=0; i<5; i++) {
    pv[i] = i+1;
}

也可以像下面这样使用指针表示法,不过数组表示法通常更简单:

for(int i=0; i<5; i++) {
    *(pv+i) = i+1;
}

图4-5说明了本例的内存分配。

enter image description here

图4-5:从堆上分配数组

这种技术分配一块内存并把它当成数组,其长度在运行时确定。不过,我们得记得用完之后释放内存。

警告 在上个例子中我们用的是*(pv+i)而不是*pv+i,因为解引操作符的优先级比加操作符高,先解引第二个表达式的指针,得到指针所引用的值,然后再给这个整数加上i。这不是我们要的效果,而且,如果我们把这个表达式作为左值,编译器会抱怨。所以,为了让代码正确工作,我们需要强制先做加法,然后才是解引操作。

赞(1)

评论 抢沙发

评论前必须登录!

 

C指针