C++中变量做数组长度

在Java中,这是完全可以的,比如我们运行如下程序:

package cn.darrenchan.storm;

import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        int num = 5;
        int[] array = new int[num];
        System.out.println(Arrays.toString(array));
    }
}

输出结果为:[0, 0, 0, 0, 0]

但是在C++中则不然,在c++中是不支持变量作为数组长度参数的,如 int num=10;int array[num];

这样写会提示编译错误"表达式必须含有常量值"。C++ Primer这本书中也确实这么写的,用VS编程编译也会报错,但是用codeblocks就不会,而且结果正确,还是不太明白原因。

但是我想实现类似的效果怎么办?

可以通过指针来动态申请空间实现动数组长度的变量赋值,写法如下:

int num= 10;
int *array;
array = new int[num];

这样array就可以当做数组来用了,这个数组的长度可以在程序运行时由计算得来。如果是普通的数组如int is[10] 编译时必须能确定数组长度,不然会报编译错误,这样灵活性受限比较大。我想这个就是new的存在原因之一吧,在栈中分配的内存,大小都是编译时就确定好的,如果想在运行时来动态计算使用内存的大小的话,就要用new这样的动态分配函数,来达到更高的灵活性。

注意:c++ 用new分配空间以后,不用的时候要记得delete释放内存,不然会有内存泄露问题。

时间: 2025-01-13 10:49:26

C++中变量做数组长度的相关文章

数组中次数超过数组长度一半的数字

问题:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 分析:看到此题第一反应就是将数组中的数字进行排序,然后统计数字出现的次数.排序的时间复杂度为O(nlogn). 从另一个角度出发,数组中有一个数字出现的次数大于数组长度的一半,也就是说它出现的次数比其他数字出现次数之和还要多.因此可以在遍历数组的时候保存两个值:(1)保存数组中的值:(2)保存数字出现的次数. 步骤:(1)当遍历的下一个数字与之前保存的数字不同时, 将次数减1: (2)当遍历的下一个数字与之前保存的数字相同时,

【C语言】获得数组长度

c语言中,定义数组后可以用sizeof命令获取数组的长度(可容纳元素个数): 如: { int data[5]; int length; length=sizeof(data)/sizeof(data[0]);//数组占内存总空间,除以单个元素占内存空间大小 printf("length of data[5]=%d",length);输出length of data[5]=5 } 但是通过传递数组名参数到子函数中,以获取数组长度是不可行的,如 int getLength(int[] a

未排序数组中累加和为给定值的最长子数组长度

题目:给定一个数组arr,该数组无序,但每个值均为正数,再给定一个正数k.求arr得所有子数组中所有元素相加和为k的最长子数组长度. 解答:最优解可以做到时间复杂度为o(n),额外空间复杂度为o(1).首先用两个位置来标记子数组的左右两头,记为left和right,开始时都在数组的最左边(left=0,right=0).整体过程如下: 1.开始时变量left=0,right=0,代表子数组arr[left......right]. 2.变量sum始终表示子数组arr[left......righ

数组中出现次数超过数组长度一半的值

题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.比如输入一个长度为18的数组{1,0,2,6,1,0,1,1,5,2,1,1,1,3,1,1,5,1}, 因为数组中数字1出现的次数超过数组的长度的一半,因此输出1. 1)最直接的办法是先把数组排序,那么超过一半的元素一定是数组最中间的元素. 2)再深入思考一下就会想到高速排序过程,利用partion找出index==middle时,index相应的值,而不必全然排序. 3)另外一种办法比較抽象,设一个变量保存当前值,设一个次数

block中无法使用C数组变量

在Objective-C的block中无法使用C数组,即使我们不对C数组做任何改变,编译的时候也会报错: #include <stdio.h> int main() { const char text[] = "hello"; //声明数组类型变量 void (^blk)(void) = ^{ printf("%c\n", text[2]); //只是读取数组变量 }; } 这是编译之后的结果: 解决的办法是使用指针声明数组: #include <

php中count获取多维数组长度的方法

本文实例讲述了php中count获取多维数组长度的实现方法.分享给大家供大家参考.具体分析如下: 先来看看下面程序运行结果: $numb=array(             array(10,15,30),array(10,15,30),array(10,15,30) ); echo count($numb,1); A.3B.12C.6D.9答案是Bcount函数中如果mode被设置为 COUNT_RECURSIVE(或 1),则会递归底计算多维数组中的数组的元素个数(也就是你结果的12).如

算法学习(十一)数组中出现次数超过长度一半的数

数组中出现次数超过数组长度一半的 数字 题目描述: 给定 一个数组,找到数组中出现次数超过数组长度一半的数字,如数组 a[]= {0,1,2,1,1},输出为1 分析: 1,可以使用伴随数组b,遍历数组a,将值作为数组b的下标,将次数作为值,然后遍历数组b,找到次数超过一半的值,然后输出.时间复杂度为O(N),不过要增加空间复杂度. 2,我们可以先对数组进行排序,因为某个数字出现次数超过一半,所以在数组的N/2处,就一定是那个数字.时间复杂主要为排序的时间,使用快排O (N*logN). 3,有

php中的注释、变量、数组、常量、函数应用介绍

php中的注释.变量.数组.常量.函数应用介绍 本文将详细介绍php中的注释.变量.数组.常量.函数应用,需要的朋友可以参考下 php中单引号与双引号的区别? 1. 由下可看出,双引号的变量是解析并输出,而单引号的变量不解析. 2.单引号的解析速度比双引号的快 3. 对于单引号来说,只有两个转义 \',\\ 4. 除了上述两个转义字符,其他都原样输出. 5. 对于双引号来说,可转义字符除\\,\',\"之外,还有\t, \r , \n 等 6.除了单引号和双引号用来声明字符串变量外,还有here

C/C++中如何获取数组的长度?

C.C++中没有提供 直接获取数组长度的函数,对于存放字符串的字符数组提供了一个strlen函数获取长度,那么对于其他类型的数组如何获取他们的长度呢?其中一种方法是使 用sizeof(array) / sizeof(array[0]), 在C语言中习惯上在 使用时都把它定义成一个宏,比如#define GET_ARRAY_LEN(array,len) {len = (sizeof(array) / sizeof(array[0]));} .而在C++中则可以使用模板 技术定义一个函数,比如: t