马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 RunningWolf 于 2013-7-25 09:10 编辑
C Primer Plus 笔记
一部分如下:
12.6分配内存:malloc()和free() 在程序运行时使用malloc()来请求一个存储块。另外还需一个指针来存放该块在内存中的位置。如: double * ptd = (double *)malloc(30 * sizeof(double)); 注意:ptd作为指向一个double类型值的指针,而不是指向30个double类型值的数据块的指针。也可以这样做来动态分配内存:ptd = (double *)malloc(n * sizeof(double)); 一般地,对应每个malloc()调用,应该调用一次free()。 //使用范例 int max, i = 0; scanf(“%d”, &max); double * ptd = (double *)malloc(max * sizeof(double)); if (ptd == NULL) { puts(“Memory allocation failed. Good bye.”); exit(EXIT_FAILURE); } puts(“Enter the values(q to quit):”); while (i < max && scanf(“%lf”, &ptd) == 1) ++i; …… free(ptd); //记着要释放这些内存啊 12.6.2 calloc() calloc()也可以分配内存,在ANSI中返回一个void指针。calloc()将块中所有位置都置为0,可以用free()来释放这些内存。如: long * newmem = (long *)calloc(100, sizeof(long)); 动态内存分配所使用的内存部分可能变成碎片状,也就是说,在活动的内存块之间散布者未使用的字节片。不管怎么样,使用动态内存往往导致进程比使用堆栈内存慢。 12.7.3 类型限定词restrict restrict允许编译器做些优化。它只可用于指针,并表明指针是访问一个数据对象的惟一且初始的方式。如: int * restrica restra = (int *)malloc(10 * sizeof(int));
|