c/c++ 传统数组的缺点

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

传统数组的缺点

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

例子

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

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

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

例子:

void f(void){int a[5]={1,2,3,4,5};....} 

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

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

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

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

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

c/c++ 传统数组的缺点,布布扣,bubuko.com

时间: 2024-08-07 00:17:04

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

C语言编程入门——指针与函数、数组

总结一下指针与函数和数组的关系及相关练习. 传统数组的缺点: # include <stdio.h> int main(void) { //数组的定义 int len = 5; int a[len]; //错误,数组的长度必须直接指定,且不能更改. int b[5]; //正确. return 0; } 确定一个数组需要几个参数: # include <stdio.h> //本函数功能是输出任意一维数组. void string(int * p, int l) //函数对数组进行处

4-指针和数组

1- 指针和一维数组 一维数组名:一维数组名是个指针常量,他存放的是一维数组第一个元素的地址. #include <stdio.h> /* 总结: 一维数组名 一维数组名是个指针常量 它存放的是一维数组第一个元素的地址 */ int main(void) { int a[5]; //a是数组名 5是数组元素的个数 元素就是变量 a[0] -- a[4] // int a[3][4]; //3行4列 a[0][0]是第一个元素 a[i][j]第i+1行j+1列 int b[5]; //a = b

28._动态内存分配

动态内存分配 传统数组的缺点(静态内存分配):   1.数组长度必须事先指定,且只能是常整数,不能是变量    例子:     int a[5]; //OK     int len = 5; int a[len]; //error   2.传统形式定义的数组,该数组的内存程序员无法手动编    程释放,在一个函数运行期间,系统为该函数中数组所     分配的空间会一直存在,直到该函数运行完毕时,数组    元素所占存储空间才会被系统释放 3.数组的长度一旦定义,长度就能被改变     4.A函数

JNI开发基础之C语言总结

目前只涉及到指针,无文件操作和网络操作: jni和ndk介绍: java的运行时环境 - java虚拟机 windows windows 下的java虚拟机 linux - java虚拟机 .class android2.2 以上 wifi 热点共享. 1.操作手机网卡, 把手机网卡的状态置为混杂模式. 2.android下的极品飞车. 重力引擎,碰撞效果的模拟. 3. c 出现使用几十年. 开源的c的代码库. opencv  intel开发, 图形和视频实时处理的方法库. 人脸识别. rmvb

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

动态内存分配 传统数组的缺点: 1数组长度必须事先制定,且仅仅能是长整数不能是变量 2传统形式定义的数组该数组的内存程序无法手动释放 3数组一旦定义,系统就会为该数组分配的存储空间就会一直存在直到该函数执行结束 4数组的长度不能再函数的执行的过程中动态的扩充或者缩小 5不能跨函数使用 为什么须要动态分配内存 动态内存分配内存举例--动态数组的构造 静态内存分配和动态内存分配 跨函数使用内存的问题 #include<stdio.h> void f(void) { int a[5]={0,1,2,

八、android jni 之C语言基础

*含义 1.乘法 3*5 2.定义指针变量 int * p://定义了一个名字叫p的变量,能够存放int数据类型的地址 3.指针运算符, //如果p是一个已经定义好的指针变量则*p表示以p的内容为地址的变量 打印数据类型 %d - int %ld – long int %c - char %f - float %lf – double %x – 十六进制输出 int或者long int或者short int %o - 八进制输出 %s – 字符串 3.指针 指针就是地址. 热身小程序 介绍指针

android jni 之C语言基础

*含义 1.乘法 3*5 2.定义指针变量 int * p://定义了一个名字叫p的变量,能够存放int数据类型的地址 3.指针运算符, //如果p是一个已经定义好的指针变量则*p表示以p的内容为地址的变量 打印数据类型 %d - int %ld – long int %c - char %f - float %lf – double %x – 十六进制输出 int或者long int或者short int %o - 八进制输出 %s – 字符串 3.指针 指针就是地址. 热身小程序 介绍指针

跨函数使用内存空间

所谓动态内存分配(Dynamic Memory Allocation)就是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法.动态内存分配不象数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小.凡是在程序中用到系统提供的动态分配存储空间函,均要求包含头文件<malloc.h>. Malloc 向系统申请分配size字节的存储区.返回分配内存空间的起始地址,若分配失败,则返回0,类型是 void* (或chaar*).ma

JNI由浅入深_2_C语言基础

*含义 1.乘法 3*5 2.定义指针变量 int * p://定义了一个名字叫p的变量,能够存放int数据类型的地址 3.指针运算符, //如果p是一个已经定义好的指针变量则*p表示以p的内容为地址的变量 打印数据类型 %d - int %ld – long int %c - char %f - float %lf – double %x – 十六进制输出 int或者long int或者short int %o - 八进制输出 %s – 字符串 3.指针 指针就是地址. 热身小程序 介绍指针