摘要:
1,malloc返回的void *类型指针不可做更改#include #include int main(void) { int *p=malloc(20); p++; //p已经变化过,因此是 无效的释放 free(p); return 0; }结果:报错*** Error in `./a.out': free(): invalid pointer: 0x0156000c *** Aborted (core dumped) 2,free双重释放#include #include //双重释放,p的值不变,... 阅读全文
摘要:
1,使用6级指针访问一个整数,使用隐式内存分配中转#include #include //构建六级指针访问一个整数 //使用隐式内存分配中转 //这个程序只是做人工分配内存的目的 int main(void) { int ******p=NULL; int a=16; p=malloc(sizeof(int *****));//同下 *p=malloc(sizeof(int ****));//同下 **p=malloc(sizeof(int ***));//同下 ***p=malloc(size... 阅读全文
摘要:
1,二级指针定义#include { //int** p; //p2是二级指针,是一个变量, //p2本身是int **类型 //p2 指向 int * 类型 int **p2=NULL; int *p1=NUL; int a=8; p1=&a; p2=&p1;// p2 --------》*p2 ----------》 **p2// int** int * int printf(“a=%d, **p2=%d\n”,a,**p2); ... 阅读全文
摘要:
堆和栈的区别一个由C/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。-程序结束后由系统释放。4、文字常量区—常量字符串就是放在这里的。程序结束后由系统释放5、程序代码区— 阅读全文
摘要:
C++/ANSI C:void*指针只支持几种有限的操作:与另一个指针进行比较;向函数传递void指针或从函数返回void*指针;给另一个void*指针赋值。不允许使用void*指针操作它所指向的对象,例如,不允许对void*指针进行解引用。不允许对void*指针进行算术操作。GNU C:GNU C指定void*指针的算术操作与char*一致。void*表示“任意类型的指针”,主要运用于内存操作函数的形参类型和返回值类型(内存操作与内存中数据类型无关,即任意类型都可以)。memcpy 原型:extern void *memcpy(void *dest, void *src, unsigned. 阅读全文