精华内容
下载资源
问答
  • C++数组初始化

    千次阅读 2018-12-28 11:19:39
    C++数组初始化 定义: int *pia = new int[10]; // array of 10 uninitialized ints 此 new 表达式分配了一个含有 10 个 int 型元素的数组,并返回指向该数组第一个元素的指针,此返回值初始化了指针 pia...

    C++数组初始化

    定义:

    int *pia = new int[10]; // array of 10 uninitialized ints

     new 表达式分配了一个含有 10  int 型元素的数组,并返回指向该数组第一个元素的指针,此返回值初始化了指针 pia

    在自由存储区中创建的数组对象是没有名字的,只能通过其地址间接地访问堆中的对象。

    注意:C++使用newdelete在堆(自由存储区)上分配和释放动态数组。

    动态数组初始化:

    1. 元素只能初始化为元素类型的默认值,而不能像数组变量一样,用初始化列表为数组元素提供各不相同的初值。

    2. 对于内置数据类型元素的数组,必须使用()来显示指定程序执行初始化操作,否则程序不执行初始化操作:

    int *pia = new int[10]; // 每个元素都没有初始化

    int *pia2 = new int[10] ();  // 每个元素初始化为0

    3. 类类型元素的数组,则无论是否使用(),都会自动调用其默认构造函数来初始化:

    string *psa = new string[10];  // 每个元素调用默认构造函数初始化

    string *psa = new string[10]();  // 每个元素调用默认构造函数初始化

    动态分配空数组:

    char *cp = new char[0];

    之后,可以动态改变cp的维数。

    动态释放:

    delete [] pia;

    典型使用示例:

    const char *pc = "a very long literal string"; // 处理C风格字符串时使用const指针

    const size_t len = strlen(pc) +1;      // size_t用于数组的大小和下标

    for (size_t ix = 0; ix != 1000000; ++ix) {

        char *pc2 = new char[len]; // pc2指向的存储空间的内容会动态改变,因此不使用const

        strncpy (pc2, pc, len); // 使用strncpy比使用strcpy安全

        // do something;

        delete [] pc2;

    }

    数组定义和初始化

    一维数组初始化:

    标准方式一 int value[100]; // value[i]的值不定,没有初始化

    标准方式二 int value[100] = {1,2}; // value[0]value[1]的值分别为12,而没有定义的value[i>1]则初始化为0

    指针方式 int* value = new int[n]; // 未初始化

    delete []value;  // 一定不能忘了删除数组空间

    二维数组初始化:

    标准方式一 int value[9][9]; // value[i][j]的值不定,没有初始化

    标准方式二 int value[9][9] = {{1,1},{2}} //value[0][0,1]value[1][0]的值初始化,其他初始化为0

    指针方式一 int (*value)[n] = new int[m][n];

                 delete []value; // n必须为常量,调用直观。未初始化

    指针方式二 int** value = new int* [m];

                  for(i) value[i] = new int[n];

                  for(i) delete []value[i];

                  delete []value; // 多次析构,存储麻烦,未初始化

    指针方式三 int * value = new int[3][4]; // 数组的存储是按行存储的

                  delete []value; // 一定要进行内存释放,否则会造成内存泄露

    多维数组初始化:

    指针方式int * value = new int[m][3][4]; // 只有第一维可以是变量,其他几维必须都是常量,否则会报错

                delete []value; // 一定要进行内存释放,否则会造成内存泄露

    数组初始化的大括号后面要加“;”来表示结束。

    数组访问:

    指针形式:如二维数组value[i][j]的访问:

    *(value[i] + j) (*(value + i))[j]

    数组作为参数传递

    一维数组参数传递:

    void Func(int *value);

    或者是

    void Func(int value[]);

    二维数组传递:

    定义是 int **value;的传递

    void Func(int **value);

    定义是 int (*value)[n] = new int[m][n];的传递

    void func(int (*value)[n]); // sizeof(p)=4,sizeof(*value)=sizeof(int)*n;

    数组与指针关系

    • 数组名的内涵在于其指代实体是一种数据结构,这种数据结构就是数组;
    • 数组名的外延在于其可以转换为指向其指代实体的指针,而且是一个指针常量;
    • 指向数组的指针则是另外一种变量类型,(在win32平台下,长度为4),仅仅意味着数组存放地址。
    • 数组名作为函数形参时,在函数体内,其失去了本身的内涵,仅仅只是一个指针,而且在其失去其内涵的同时,它还失去了其常量特性,可以作自增、自减等操作,可以被修改。

    数组的存储格式

    多维数组在内存中存储时是按照最低维连续的格式存储的,如二维数组{{1,2}{3,4}}在内存中的位置是这样顺序的“1,3,2,4”,这跟matlab是有区别的,matlab是按列进行存储的。在使用指针进行索引时很有用。

    字符数组

    char类型的数组被称作字符数组,通常用来存储字符串。字符串是附加有特殊字符(串尾标志)的字符序列。串终止字符表明字符串已经结束,该字符由转义序列‘\0’定义,有时被称为空字符,占用一个字节,其中8位全为0。这种形式的字符串通常被称为C型字符串,因为以这样的方式定义字符串是在C语言中推出的,在C++一般使用string,而MFC中则定义了CString类。

    字符串中每个字符占用一个字节,算上最后的空字符,字符串需要的字节数要比包含的字节数多一个。如:

    char movie_star[15] = “Marilyn Monroe”;

    这里字符串是14个字符,但是要定义15个字符串的数组。也可以不指定字符数组的个数。如:

    char movie_star[] = “Marilyn Monroe”;

    内存泄露

    我们定义了一个指针,然后给它赋予了一个地址值,然后又不再使用,但是没有delete,那么当给指针赋予其他的地址值时,原来的内存将无法释放,这就叫做内存泄露。

    展开全文
  • C++ 对象数组初始化

    万次阅读 2018-11-02 21:13:24
    如何给中定义了带有参数的构造函数的对象数组赋值 class A { public: A(){}//无参构造函数0 A(int i){}//有参构造函数1 A(int i,int j){}//有参构造函数2 }; int main() { A a,b[5];//调用6次无参构造函数...

    如何给类中定义了带有参数的构造函数的对象数组赋值

    class A
    {
    public:
        A(){}//无参构造函数0
        A(int i){}//有参构造函数1
        A(int i,int j){}//有参构造函数2
    };
    
    int main()
    {
        A a,b[5];//调用6次无参构造函数,若定义了1,2,没有定义0会出错
        A c(1),d[2] = {1,A(1)};//调用了构造函数1,若没有定义构造函数0,则对象数组必须初始化
                               //(必须有=后面的部分,否则提示没有合适的构造函数)
        A e(1,2),f[2] = {A(1,1),A(1,2)};//调用了构造函数2,若没有定义构造函数0,则对象数组必须初始化
                                        //(必须有=后面的部分,否则提示没有合适的构造函数)
    }
        

     

    展开全文
  • Java类数组初始化

    千次阅读 2019-07-29 15:16:31
    这句话只是初始化数组指针变量,还没有对数组元素进行初始化 还得有- 初始化代码① : for(int i=0; i<n; i++, pt[i] = new Point() ) ; 我们都已经用过C语言中的memset( pt, x, sizeof(pt) )函数; 自然就会...
    假如有类数Potint []pt = new Point[n];
    这句话只是初始化了数组指针变量,还没有对数组元素进行初始化
    还得有-
    初始化代码① : for(int i=0; i<n; i++, pt[i] = new Point() ) ;
    
    我们都已经用过C语言中的memset( pt, x, sizeof(pt) )函数;
    
    自然就会猜测Java也会有自己的函数来代替for代码:
    所以带着疑问来到Java api查找那个神奇的函数;
    终于找到一个fill函数, 用法是fill(pt, new Point());
    
    原本以为OK了,结果后来发现改变数组一个元素,所有元素都跟着改变了;
    原来fill函数相当于是pt[0] = pt[1] = ....=pt[n-1] = new Point();
    相当于浅拷贝,只要修改数组一个元素,所有元素都会变。。。┭┮﹏┭┮
    
    所以猜测不成立,,,只能用乖乖去用自己敲的初始化代码ooo
    

    GO---------
    -------------↓
    -----------↓↓↓
    233网校拓展java常识

    展开全文
  • 今天小编就为大家分享一篇C语言不定长数组初始化方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 今天小编就为大家分享一篇C++中静态初始化数组与动态初始化数组详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • java代码-JAVA中String数组初始化,一维数组和二维数组初始化
  • 类数组初始化

    千次阅读 2018-10-02 08:39:22
    对于单参构造函数,声明以对象作为元素的数组时,有两种初始化方法: Point p[3] = {Point(2),Point(9),Point(4)}; Point p[3] = { 2,9,4 };//仅适用于单参数的构造函数 对于多参构造函数,必须使用显式的...
    struct Point {
    	int x, y;
    	Point(int _x, int _y) :x(_x), y(_y) { cout<<"create new Point 2"<<endl; }
    	Point(int _x) :x(_x) { cout << "create new Point 1" << endl; }
    };

     

    对于单参构造函数,声明以对象作为元素的数组时,有两种初始化方法:

    Point p[3] = {Point(2),Point(9),Point(4)};
    Point p[3] = { 2,9,4 };//仅适用于单参数的构造函数

    对于多参构造函数,必须使用显式的构造函数进行初始化:

    Point p[3] = { Point(1,2),Point(7,3),Point(-1,-1) };

    省略构造函数的方法仅适用于单参构造函数,即便用圆括号括起来,也等价于用圆括号中的最后一个值来单参初始化。所以在原结构/类有单参构造函数的情况下,下面的初始化都是合法而且等价的:

    Point p[3] = { (2,5),(3,-1),(8,7) };
    Point p[3] = { 5,-1,7 };
    Point p[3] = { (2,9,5),(3,-1,-1),(8,0,7) };
    Point p[3] = { (1,2,5),-1,(0,4,6,7,7,7,7,7) };

     

    STL中可以直接用花括号 {1,2} 这种方式返回vector

    展开全文
  • 自定义的Student类,代码如下...只有初始化类数组里面的每一个类,才能给类的成员赋值。 Student[] stu= new Student[100];//实例化类数组100个 for (int i = 0; i < 100; i++) { //实例化数组里每个元素,方可给元
  • Java自定义类数组初始化 先创建一个A类型 public class A { private int id; public A() { } public A(int id) { this.id = id; } public int getId() { return id; } public void setId(int id)...
  • C++中的数组初始化

    千次阅读 2020-04-01 15:34:20
    数组初始化规则: 在定义数组时才能使用初始化,不能将一个数组赋值给另一个数组。 初始化数组时,数组元素个数已给定时,可以部分初始化,未给出的将被设置为0。 初始化数组时,若元素个数未定义,则以初始化给定...
  • 【C++】C++数组初始化方法

    万次阅读 2018-12-17 22:13:55
    定义: int *pia = new int[10];...此 new 表达式分配了一个含有 10 个 int 型元素的数组,并返回指向该数组第一个元素的指针,此返回值初始化了指针 pia。 在自由存储区中创建的数组对...
  • 一维数组初始化: 动态初始化:(声明并开辟数组) 数据类型[ ] 数组名称=new 数据类型[长度] int[ ] data=new int [5] :声明并开辟一个长度为5的数组 数组通过下标索引来获取元素,下标默认从0开始。数组下标...
  • C#数组初始化的几种方式

    万次阅读 2019-06-17 09:04:34
    最怕你一生碌碌无为,...C#数组初始化的几种方式 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace OneArray { class Program { static void Main(string[...
  • 【C】数组数组初始化总结;参见博客https://blog.csdn.net/u010168781/article/details/80061118
  • C++对象数组初始化

    千次阅读 2018-01-30 11:18:00
    C++对象数组初始化 对象 数组 初始化可以使用构造函数初始化,同时有不同的构造函数,可以对对象数组元素使用不同的构造函数; posted on 2018-01-30 ...
  • C++自定义的对象数组初始化

    千次阅读 2015-03-20 15:48:42
    C++的对象数组初始化与基本数据类型的数组初始化差不多,具体如下: Point是自己写的,它的初始化形式为: Point p[5] = { Point(10, 200), Point(200, 200), Point(30, 20), Point(105, 240), ...
  • java对象数组 创建对象数组初始化对象数组

    万次阅读 多人点赞 2019-07-30 16:34:15
    当需要一个的多个对象时,应该用该的对象数组来表示,通过改变下标值就可以访问到不同的对象。 对象数组的定义和使用: 对象数组的定义与一般数组的定义类似,但是需要为每一个元素实例。 对象数组的声明形式...
  • C语言数组初始化及malloc初始化

    千次阅读 2021-05-06 20:39:20
    数组赋值初始化的三个方式 1、{0} 初始化 例如: int nums[3] = {0}; 但是经常出现的是给定长度(变量)然后需要进行初始化,如果写成下式: int main(){ int numsSize=0; scanf("%d",&numsSize); int ...
  • Java自定义类数组的创建和初始化

    万次阅读 多人点赞 2018-03-18 17:00:22
      刚刚在慕课学习Java的集合List过程中,向集合中添加元素时,遇到一个问题: 定义了一个Course; public class Course { private String id; private String name; //课程名称 //get set方法 ...
  • Numpy的主要数据类型是ndarray,即多维数组。它有以下几个属性: ndarray.ndim:数组的维数 ndarray.shape:数组每一维的大小 ndarray.size:数组中全部元素的数量 ndarray.dtype:数组中元素的类型(numpy.int32...
  • C# 对象数组初始化

    千次阅读 2020-06-03 17:22:09
    经常忘记,干脆写blog中,方便查询使用: C# 对象数组初始化: //定义一个对象的,包含2个文本属性 public class menunode ...//初始化一个数组 public static menunode[] ms = new menunode[] .
  • 本篇文章主要是对js二维数组定义和初始化的三种方法进行了总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助
  • 主要介绍了Java编程中二维数组初始化和基本操作实例,是Java入门学习中的基础知识,需要的朋友可以参考下
  • 本文实例讲述了C#中数组初始化与数组元素复制的方法。分享给大家供大家参考。具体如下: 下面的代码演示如何创建和初始化数组,以及C#中如何将数组元素从一个复制到另外一个的方法。 using System; public class ...
  • 字符数组初始化为空

    万次阅读 2020-04-08 16:38:20
    字符数组初始化为空1. 总结起来有以下三种方式:2. 分析3. 结论 1. 总结起来有以下三种方式: (1) char str[10]=""; (2) char str[10]={’\0’}; (3) char str[10] = ‘\0’; 2. 分析 第(1)(2)种方式是将str数组的...
  • 对象数组初始化

    万次阅读 多人点赞 2018-05-05 11:28:56
    在建立数组时,可以在定义数组时提供实参以实现初始化。1、如果构造函数只有一个参数,可以直接在等号后面的花括号内提供实参,如: Student stu【3】={10,20,30};2、如果构造函数有多个参数,在定义时在花括号中...
  • C语言数组初始化的三种方法

    万次阅读 多人点赞 2019-09-27 10:34:48
    C语言中,数组初始化的方式主要有三种: 1、声明时,使用 {0} 初始化; 2、使用memset; 3、用for循环赋值。 那么,这三种方法的原理以及效率如何呢? 请看下面的测试代码: #define ARRAY_SIZE_MAX (1*1024...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,136,751
精华内容 454,700
关键字:

类数组初始化