数组值得注意的两点以及如何创建并使用动态数组?

news/2024/7/20 14:33:00 标签: c/c++, 内存管理

在数组一章中,曾介绍过数组的长度是预先定义好的,在整个程序中固定不变。C语言中不允许动态数组类型。

例如:

int n;

    scanf("%d",&n);

int a[n];

用变量表示长度,想对数组的大小作动态说明,这是错误的。但是在实际的编程中,往往会发生这种情况,即所需的内存空间取决于实际输入的数据,而无法预先确定。对于这种问题,用数组的办法很难解决。为了解决上述问题,C语言提供了一些内存管理函数,这些内存管理函数可以按需要动态地分配内存空间,也可把不再使用的空间回收待用,为有效地利用内存资源提供了手段。

  1. C语言中只有一维数组,而且数组的大小必须在编译期就作为一个常数确定下来。然而,C语言中数组的元素可以使任何类型的对象,方然也可以使另外一个数组。因此,要仿真出一个多维数组就不是一件难事了。
  2. 对于一个数组,我们只能做两件事:确定该数组的大小,以及获得指向该数组下标为0的元素的指针。其他有关数组的操作,哪怕是以数组下标进行运算的,实际上都是通过指针进行的。即任何一个数组下标运算都等同于一个对应的指针运算,因此我们完全可以依据指针行为定义数组下标的行为。
  • 那么,问题来了,怎么创建并使用动态数组?
  • 基本思路是使用malloc()库函数来得到一个指向一大块内存的指针。然后想引用数组一样

引用这块内存,其机理就是一个数组下标访问可以改写为一个指针加上偏移量。

  • int N;
  • scanf("%d",&N);
  • int *p;
  • p=(int *)malloc(sizeof(int)*N);

 

转载于:https://www.cnblogs.com/chengjaven/p/4104226.html


http://www.niftyadmin.cn/n/719173.html

相关文章

用R语言实现向量化与并行计算

向量化与并行计算 (2012-05-11 11:10) 应用场景决定知识的储备与工具的选择,反过来,无论你选择了什么样的工具,你一定会努力地把它改造成符合自己应用场景所需的那个样子。从这个道理来说,我选择了R作为数据挖掘人员手中攻城陷池的…

java中String类常用方法总结

java中String的常用方法 java中String的常用方法 1、length() 字符串的长度   例:char chars[]{a,b.c};     String snew String(chars);     int lens.length(); 2、charAt() 截取一个字符   例:char ch;     ch"abc".charA…

目录扫描编写

use HTTP::UserAgent; my $fp open result.txt, :w; my threads; #控制线程数目 sub MAIN (Str $ip, Str $dict) {##判断是否是文件if $dict.IO.f {#不要把文件一次进数组, 一行一行读就行for $dict.IO.lines -> $line {push threads, start {#拼接urlmy $ua H…

Kernel trace tools(二):内核态执行时间跟踪

本文是由字节跳动系统部 STE 团队出品的“kernel trace tools”系列文章之一,以介绍团队自研多类延迟问题追踪工具。在实际工作中,会遇到由于内核态不调度而引发的高网络延迟或者卡顿问题。但是,对于该类问题的定位和追踪缺乏行之有效的方案或…

shell编程 第三章 循环结构

文章目录一、 循环结构类型二、for循环1、for循环概述2、两种方法(1)C语言风格(2)Python风格(in的使用)三、while循环1、while概述2、DO WHILE 循环四、unti 循环五、expect交互六、循环控制语句1、break语…

字节跳动在 Go 网络库上的实践

本文选自“字节跳动基础架构实践”系列文章。“字节跳动基础架构实践”系列文章是由字节跳动基础架构部门各技术团队及专家倾力打造的技术干货内容,和大家分享团队在基础架构发展和演进过程中的实践经验与教训,与各位技术同学一起交流成长。RPC 框架作为…

第0次作业

Part 0 感悟 时间很快,自己已经大四。通过阅读一些博客作者的经历,自己的大学投入在学习(编程)上的时间真的有点少。在编程这块,虽然是科班生,但是却完全没有把握住科班生的优势,那就是完整的计…

放麦子 valueof substring

import java.math.BigInteger;public class Question8 {/*** 放麦子 你一定听说过这个故事。国王对发明国际象棋的大臣很佩服, 问他要什么报酬,大臣说:请在第1个棋盘格放1粒麦子,* 在第2个棋盘格放2粒麦子,在第3个棋盘…