龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

学点 C 语言(23): 数据类型 - 给指针分配内存

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
C 语言的内存分配很简单: malloc、calloc、realloc、free malloc(字节数); 返回内存段的首地址, void 的. calloc(个数, 类型大小); 和 malloc 的区别就是它会初始化内存为空. realloc(原指针, 字节数);

  C 语言的内存分配很简单: malloc、calloc、realloc、free

  malloc(字节数); 返回内存段的首地址, void 的.

  calloc(个数, 类型大小); 和 malloc 的区别就是它会初始化内存为空.

  realloc(原指针, 字节数); 重新分配由 malloc、calloc 分配的内存; 这里有太多注意事项:

  1、如果缩小了, 会截掉一块, 会保留前面的内容;

  2、如果扩大了, 仍会保留已有的内容, 但新加的内存不会初始化;

  3、在扩大时, 有可能内存地址会变化, 这样原来的指针就废了, 不过返回值是新指针, 所以继续使用的应该是返回值.

  如果分配失败会返回 NULL, 一般是因为内存不足; 分配 0 字节内存也会返回 NULL 但这没有意义.

  它们都是用 free(指针) 释放.

  1. 给一个整数分配内存:

#include 

#include 

int main(void)

{

  int *p = NULL;

//  p = malloc(sizeof(int)); /* 应该像下一句同时类型转换, 不然在 C++ 里面不行 */

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

  

  *p = 100;

  printf("%dn", *p);

  

  free(p);

  

  getchar();

  return 0;

}

  2. 给 3 个整数分配内存:

#include 

#include 

int main(void)

{

  int *p = NULL;

  

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

  

  *p = 111;

  *(p+1) = 222;

  *(p+2) = 333;

  printf("%d,%d,%dn", *p, *(p+1), *(p+2));

  free(p);

  getchar();

  return 0;

}

精彩图集

赞助商链接