c类 对象 内存分配,c对象的内存分配

1,c对象的内存分配1)程序在内存中映像包含5个部分:栈、堆、全局静态区、文本常量区和代码区 。2)对象实例化后,确切地说是实例中的数据成员保留在推中;实例的方法(代码)保存在代码段区中,实例的代码和数据成员肯定是分开存放 。回到你的问题:1)成员变量 int 存放在堆中,不是栈中2)void Add()肯定在代码区 。在代码区的void Add()通过this找到堆中的实例 。【c类 对象 内存分配,c对象的内存分配】
2,C语言内存分配因为char *p = “world”;将p指向一个“world”这个段内存的开头,由于"world"这段内存是常量不能进行修改.所以你不能修改p[0].还有p[0]不应该叫数组元素了,因为p是一个指针,准确的说是p指向内存的第一个元素p指向常量字符串“world” , 而常量字符串的内容是不可以改变的 。同意无病呻吟2010修改可以用memcpy进行. 。。字符指针p指向world的头,就是w你这个是指针,不是指针数组 , 不能直接像上面a[0] = X;那么使用的分配给你的是安全内存,你乱用的是不安全的内存区
3 , C语言动态内存分配1.p1=(int *)malloc(10*sizeof(int));//malloc 函数将会在动态存储区中分配一个长度为 10*sizeof(int)的 <连续> 空间 。而且p1的值是 分配域的起始地址;这就有一点像数组名了 。2.例如 int temp[10]; int *ptemp;ptemp=temp; //得到数组的首地址 。这样 ptemp 就可以 引用 数组的元素了 。比如 ptemp[i];当然 这是 固定分配内存的 。3.scanf("%d",&p1[btc]); 和 printf("%d",p1[btc]);这两个函数 中 p1 的作用 就 是相当于数组名 。引用动态的数组 。malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表 。调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块 。然后 , 将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节) 。接下来,将分配给用户的那块内存传给用户,并将剩下的那块(如果有的话)返回到连接表上p1=(int *)malloc(10*sizeof(int))相当于生成了一个动态数组,其长度可待定 。p1是一个指向一连续内存块的指针 。malloc申请时就相当于定义了一个指针,长度只是待定的 , 指针指向首地址 。在一定长度下,这与数组的存储分配是一致的,因此可以像数组那样输入输出 。p1=(int *)malloc(10*sizeof(int));就是生成了一个动态数组啊 而且C语言里p[x]实际上就等价于*(p+x),只要p是指针类型的变量,不管它是数组,还是其他什么,都不会报错要实现根据程序的需要动态分配存储空间,就必须用到以下几个函数1、malloc函数malloc函数的原型为:void *malloc (u igned int size)其作用是在内存的动态存储区中分配一个长度为size的连续空间 。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针 。还有一点必须注意的是,当函数未能成功分配存储空间(如内存不足)就会返回一个null指针 。所以在调用该函数时应该检测返回值是否为null并执行相应的操作 。下例是一个动态分配的程序:#include #include main() int count,*array; /*count是一个计数器,array是一个整型指针,也可以理解为指向一个整型数组的首地址*/ if((array(int *) malloc(10*sizeof(int)))==null)printf("不能成功分配存储空间 。");exit(1); } for (count=0;count〈10;count++) /*给数组赋值*/array[count]=count; for(count=0;count〈10;count++) /*打印数组元素*/printf("%2d",array[count]);}上例中动态分配了10个整型存储区域,然后进行赋值并打印 。例中if((array(int *) malloc(10*sizeof(int)))==null)语句可以分为以下几步:1)分配10个整型的连续存储空间,并返回一个指向其起始地址的整型指针2)把此整型指针地址赋给array3)检测返回值是否为null2、free函数由于内存区域总是有限的,不能不限制地分配下去,而且一个程序要尽量节省资源 , 所以当所分配的内存区域不用时,就要释放它,以便其它的变量或者程序使用 。这时我们就要用到free函数 。其函数原型是:void free(void *p)作用是释放指针p所指向的内存区 。其参数p必须是先前调用malloc函数或calloc函数(另一个动态分配存储区域的函数)时返回的指针 。给free函数传递其它的值很可能造成死机或其它灾难性的后果 。注意:这里重要的是指针的值,而不是用来申请动态内存的指针本身 。例:int *p1,*p2;p1=malloc(10*sizeof(int));p2=p1;……free(p2) /*或者free(p2)*/malloc返回值赋给p1 , 又把p1的值赋给p2,所以此时p1,p2都可作为free函数的参数 。malloc函数是对存储区域进行分配的 。free函数是释放已经不用的内存区域的 。所以由这两个函数就可以实现对内存区域进行动态分配并进行简单的管理了 。希望能解决您的问题 。

    推荐阅读