另外*p[i]=i肯定报错。这个时候p可以当成一维数组用,你取了第i个元素的值,再取这个元素作为地址的元素的值,肯定错误。相当于取了两回地址,访问异常。
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:主机域名、虚拟空间、营销软件、网站建设、泰宁网站维护、网站推广。
要实现动态内存的分配,除了利用含指针成员的结构体之外,还需利用C语言提供的几个标准库函数。
malloc()不会初始化所分配的空间。(即,你申请的空间中,其内容是不确定的,可能有值,也可能没值)当free()释放所申请的空间时,空间中的内容也不会被自动清除。
函数的相对地址在编译链接的时候就已经分配好了,但是绝对地址是未知的。
再说的多一点,一个进程(运行的程序)可分为若干段:代码段、数据段、堆栈段等,其中函数所操作的空间(也就是局部变量的空间)就位于堆栈段,所谓函数分配内存大小,实际就是堆栈段指针的变化而已。
malloc函数:其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针。
基本上C程序的元素存储在内存的时候有3种分配策略:静态分配 如果一个变量声明为全局变量或者是函数的静态变量,这个变量的存储将使用静态分配方式。静态分配的内存一般会被编译器放在数据段或代码段来存储,具体取决于实现。
分配内存空间函数malloc 调用形式: (类型说明符*) malloc (size) 功能:在内存的动态存储区中分配一块长度为size 字节的连续区域。函数的返回值为该区域的首地址。 “类型说明符”表示把该区域用于何种数据类型。
1、使用malloc和new申请的空间存放在堆区,而不是在栈区,因此在函数调用结束后,这段内存还存在,需要程序员使用free和delete进行人工回收。
2、你如果用mallic申请,那你自己不释放(就是用free释放)那就会直到关机或者注销才会被释放,子函数结束时不会被释放。
3、然而这个内存块是通过压栈的方式创建的,函数返回的是栈上的临时地址,函数退出后通过退栈送到EAX寄存器并赋值给外部变量。