专题:  动态内存分配 (所有高级语言,没有C里深刻)

传统数组的缺点

  • 1.数组长度必须事先指定,而且只能是常整数,不能是变量    

例子

int a[];  //必须事先指定,而且只能是常整数    

int len = ; int a[len];//error      
  • 2.传统形式定义的数组,该数组的内存程序员无法手动释放   数组一旦定义,系统为数组分配的内存空间就会一直存在,除非数组所在的函数运行终止。 

在一个函数运行期间,系统为该函数中的数组分配的空间会一直存在。直到该函数运行完毕时,数组的空间才会被系统自动释放。

例子:

void f(void){int a[]={,,,,};....} 

//数组a 占20个字节的内存空间,程序员无法手动编程释放它,数组a只能在f()函数结束被系统释放 
  •   3. 数组的长度一旦定义,数组长度就不能再更改。   数组的长度不能在函数运行的过程中动态的扩充或缩小 
  •    4. 传统方式定义的数组不能跨函数使用 

  A函数定义的数组,只有在A函数运行期间才可以被其他函数使用, 但A函数运行完毕后,A函数中的数组将无法在被其他函数使用。

#include<stdio.h>
void g(int * pArr, int len)
{
pArr[] = ; //parr[2]==a[2] 等价于
} void f(void)
{
int a[] = {,,,,}; //数组a 只在f()执行时有效 g(a,5);
printf("%d\n", a[]);
}
int main(void)
{
f(); // 结果: 88
//printf("a[0] = %d\n", a[0]); // error return 0; }

为什么需要动态分配内存   很好的解决的了传统数组的4个缺陷

动态内存分配举例_动态数组的构造 难点 

c/c++ 传统数组的缺点的更多相关文章

  1. knockout 监控数组的缺点

    knockout的监控数组没有想象中的强大,只能监控数组元素的位置变化,或个数的增减,然后对视图对应区域进行同步. <!DOCTYPE html> <html> <hea ...

  2. day5 -指针

    指针和指针变量 指针就是地址,地址就是指针 地址就是存放单元的编号 指针变量是存放地址的变量 指针和指针变量是两个不同的概念,但是要注意,通常我们叙述时会把指针变量简称为指针,实际他们含义并不一样 指 ...

  3. 八、android jni 之C语言基础

    *含义 1.乘法 3*5 2.定义指针变量 int * p://定义了一个名字叫p的变量,能够存放int数据类型的地址 3.指针运算符, //如果p是一个已经定义好的指针变量则*p表示以p的内容为地址 ...

  4. 1.1C++入门 未完待续。。。

    第一个C++程序: #include<iostream> int main() { std::cout << "Hello World !" << ...

  5. 全国计算机等级考试二级教程-C语言程序设计_第13章_编译预处理和动态存储分配

    free(p);//释放内存 p = NULL;//软件工程规范,释放内存以后,指针应该赋值为空 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h ...

  6. JNI由浅入深_2_C语言基础

    *含义 1.乘法 3*5 2.定义指针变量 int * p://定义了一个名字叫p的变量,能够存放int数据类型的地址 3.指针运算符, //如果p是一个已经定义好的指针变量则*p表示以p的内容为地址 ...

  7. android jni 之C语言基础

    *含义 1.乘法 3*5 2.定义指针变量 int * p://定义了一个名字叫p的变量,能够存放int数据类型的地址 3.指针运算符, //如果p是一个已经定义好的指针变量则*p表示以p的内容为地址 ...

  8. c语言学习的第13天1

    #include <stdio.h> int main(void) { int a[5]={1,2,3,4,5}; printf("%#x, %#x\n",a,& ...

  9. 重拾c语言之动态内存分配

    动态内存分配 传统数组的缺点: 1数组长度必须事先制定,且仅仅能是长整数不能是变量 2传统形式定义的数组该数组的内存程序无法手动释放 3数组一旦定义,系统就会为该数组分配的存储空间就会一直存在直到该函 ...

随机推荐

  1. linux 修改文件时间

    1.ls -l *.sh 2.touch -d "10/13/2013" *.sh [我想把所以的.sh文件修改到三个月前(2013年10月13)的时间.]3.ls -l *.sh ...

  2. 从数组中随机取n条不重复的数据

    工作中经常遇到有关数组的一些操作 1. 从数据中随机取n条不重复的数据 (PS:下面的S.each是KISSY.each方法,大家可以改为for循环) /* 1 从数组arr中随机取n条不重复的数据 ...

  3. Java并发——线程安全、线程同步、线程通信

    线程安全 进程间"共享"对象 多个“写”线程同时访问对象. 例:Timer实例的num成员,即add()方法是用的次数.即Timer实例是资源对象. class TestSync ...

  4. day0

    /* 考前最后一天了 由于下午赶路 就放到上午发了 早晨浏览博客 上午浏览博客 感谢学弟为我写的博客233 很开心认识你们这一群人 嗯 最后一天了 就要说再见了 大家加油吧 ^ ^ */

  5. java main函数不执行?

    今天脑袋短路,对于这个问题纠结了好久.这个问题具体是这样的: public class test { public static void main(String[] args) { test2 t ...

  6. hadoop_集群安装_2

    由于上一篇文章http://www.cnblogs.com/inuyasha1027/p/hadoop_cluster_install_1.html 截图太多,占用了太多的地方,所以将VMTools ...

  7. nvidia安装与卸载方式

    第1种方法:.最好的方式不是手动安装官方驱动(手动安装官方驱动无法使用gpu,而且无法启用3d,同时无法生效,所以最好采用此种方法),而是使用bumblebee-nvidia安装,不过要先添加x-sw ...

  8. MVVM学习笔记

    MVVM学习笔记 1.MVVM的简介 MVVM模式是Model-View-ViewModel模式的简称,也就是由模型(Model).视图(View).视图模型(ViewModel),其目的是为了实现将 ...

  9. ios专题 -KVO , KVC

    KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知. addObserver:  forKeyPath: options: conte ...

  10. Codevs 1225 八数码难题

    1225 八数码难题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Yours和zero在研究A*启发式算法.拿到一道经典的 ...