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

    2020-09-06 13:07:44
    1、整型数组初始化-栈初始化 //默认初始化 int a[5] = {}; //[0, 0, 0, 0, 0] //全部初始化为0 int a[5] = {0}; //[0, 0, 0, 0, 0] //c++11新写法 int a[5]{}; //[0, 0, 0, 0, 0] 2、字符串的初始化-栈初始化 ...

    1、整型数组的初始化-栈初始化

    //默认初始化
    int a[5] = {};    //[0, 0, 0, 0, 0]
    //全部初始化为0
    int a[5] = {0};    //[0, 0, 0, 0, 0]
    //c++11新写法
    int a[5]{};    //[0, 0, 0, 0, 0]

    2、字符串的初始化-栈初始化

    和整型的初始化基本一致,会调用构造函数

    string *str = string[5];    //调用5次默认构造函数
    string *str1 = string[5]{"aaa"};    //数组中的第一个元素调用 string::string(const char *)  进行初始化。后面四个调用 默认构造函数

    3、数组的默认初始化

    如果不明确指出初始化列表,那么基本类型不会被初始化(全局变量和静态变量除外),所有内存都是脏数据;且自定义的类类型会为每个元素调用默认构造函数进行初始化

    int a[5]{};
    a[6];      //32766
    a[10];    //1474921429
    // Xcode会提示 Array index 10 is past the end of the array (which contains 5 elements)。虽然不会爆红,但是Xcode提示越界了。这在程序中也是需要特别注意的,越界时会取到脏数据。
    string str[5];     //["","","","",""]
    string str1[5] = {"","2","",""};     //["","2","',"",""]
    string str2[5] = {"a"};     //["a","","","",""]

    4、数组的堆初始化

    int *a = new int[5];        //脏数据数组
    int *str = new string[5];    //空字符串数组
    int *b = new int[5]{0};    //   [0,0,0,0,0]
    int *str1 = new string[5] {"aaa"};    //["aaa","","","",""]
    //以上几行代码遵循栈中数组的初始化规则,除此之外这里还有一个新语法
    int *c = new int[5]();    //[0,0,0,0,0]
    //该语法后面的一对圆括号,表示使用默认值初始化整个数组,所以对于类类型来说,new string[5] 与 new string[5]() 是等价的,都会调用默认构造函数进行初始化;但是对于基本类型就不同了。new int[5]根本不会初始化,而new int[5]()则会使用int()的值,即0进行初始化。
    
    // int *c = new int[5]{0}  // 效果同上

     

    展开全文
  • 在刷LeetCode时,使用数组经常发生意料之外的bug,查找原因之后,发现是以为默认初始化数组,其实并没有初始化,所以下面叫一下数组的定义及初始化。 转载自:https://www.cnblogs.com/haoyijing/p/5815035.html ...

    背景:

    在刷LeetCode时,使用数组经常发生意料之外的bug,查找原因之后,发现是以为默认初始化的数组,其实并没有初始化,所以下面总结一下数组的定义及初始化。

    数组初始化的方式

    转载自:https://www.cnblogs.com/wjw-blog/p/11972219.html

    1、整型数组的初始化-栈初始化

    //默认初始化
    int a[5] = {};    //[0, 0, 0, 0, 0]
    //全部初始化为0
    int a[5] = {0};    //[0, 0, 0, 0, 0]
    //c++11新写法
    int a[5]{};    //[0, 0, 0, 0, 0]
    
    //注意,想要整型数组 全部初始化为1的时候不能粗暴的设置为 
    int a[5] = {1};    //[1, 0, 0, 0, 0]
    // 因为 数组初始化列表中的元素个数小于指定的数组长度时, 不足的元素以默认值填补。
    //可以分别赋值
    int a[5] = {1,1,1,1,1}; //[1,1,1,1,1]
    

    2、字符串的初始化-栈初始化
    和整型的初始化基本一致,会调用构造函数

    string *str = string[5];    //调用5次默认构造函数
    string *str1 = string[5]{"aaa"};    //数组中的第一个元素调用 string::string(const char *)  进行初始化。后面四个调用 默认构造函数
    

    3、数组的默认初始化

    int a[5]{};
    a[6];      //32766
    a[10];    //1474921429
    // Xcode会提示 Array index 10 is past the end of the array (which contains 5 elements)。虽然不会爆红,但是Xcode提示越界了。这在程序中也是需要特别注意的,越界时会取到脏数据。
    string str[5];     //["","","","",""]
    string str1[5] = {"","2","",""};     //["","2","',"",""]
    string str2[5] = {"a"};     //["a","","","",""]
    

    4、数组的堆初始化(动态数组初始化)

    int *a = new int[5];        //脏数据数组
    int *str = new string[5];    //空字符串数组
    int *b = new int[5]{0};    //   [0,0,0,0,0]
    int *str1 = new string[5] {"aaa"};    //["aaa","","","",""]
    //以上几行代码遵循栈中数组的初始化规则,除此之外这里还有一个新语法
    int *c = new int[5]();    //[0,0,0,0,0]
    //该语法后面的一对圆括号,表示使用默认值初始化整个数组,所以对于类类型来说,new string[5] 与 new string[5]() 是等价的,都会调用默认构造函数进行初始化;但是对于基本类型就不同了。new int[5]根本不会初始化,而new int[5]()则会使用int()的值,即0进行初始化。
    

    关于动态数组的初始化

    转载自https://www.cnblogs.com/haoyijing/p/5815035.html

    定义:

    int *pia = new int[10]; // array of 10 uninitialized ints
    int *p = new int[len];//len可以是运行时才确定的int型数字
    

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

    注意int *p=new int[len];这一句,你不能这样做: int p[len];
    C++编译器会报错说len的大小不能确定,因为用这种形式声明数组,数组的大小需要在编译时确定。而且这样也不行:int p[]=new int[len];
    编译器会说不能把int*型转化为int[]型,因为用new开辟了一段内存空间后会返回这段内存的首地址,所以要把这个地址赋给一个指针,所以要用int *p=new int[len];

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

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

    动态数组初始化:

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

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

    int *pia = new int[10]; // 每个元素都没有初始化
     
    int *pia2 = new int[10] ();  // 每个元素初始化为0
    
    1. 类类型元素的数组,则无论是否使用(),都会自动调用其默认构造函数来初始化:
    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;
     
    }
    

    参考:C++ Primer 学习笔记:动态数组

    一、数组定义和初始化

       1: 一维数组初始化:
       2: 标准方式一: int value[100]; // value[i]的值不定,没有初始化
       3: 标准方式二: int value[100] = {1,2}; // value[0]和value[1]的值分别为1和2,而没有定义的value[i>1]
       4:                                  // 则初始化为0
       5: 指针方式: int* value = new int[n]; // 未初始化
       6:            delete []value;  // 一定不能忘了删除数组空间
       7:  
       8: 二维数组初始化:
       9: 标准方式一: int value[9][9]; // value[i][j]的值不定,没有初始化
      10: 标准方式二: int value[9][9] = {{1,1},{2}}//value[0][0,1]和value[1][0]的值初始化,其他初始化为0
      11: 指针方式一: int (*value)[n] = new int[m][n];
      12:              delete []value; // n必须为常量,调用直观。未初始化
      13: 指针方式二: int** value = new int* [m];
      14:              for(i) value[i] = new int[n];
      15:              for(i) delete []value[i];
      16:              delete []value; // 多次析构,存储麻烦,未初始化
      17: 指针方式三: int * value = new int[3][4]; // 数组的存储是按行存储的
      18:              delete []value; // 一定要进行内存释放,否则会造成内存泄露
      19:  
      20: 多维数组初始化:
      21: 指针方式: int * value = new int[m][3][4]; // 只有第一维可以是变量,其他几维必须都是常量,否则会报错
      22:            delete []value; // 一定要进行内存释放,否则会造成内存泄露
    

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

    数组访问:

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

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

    二、数组作为参数传递

       1: 一维数组参数传递:
       2: void Func(int *value);
       3: 或者是
       4: void Func(int value[]);
       5:  
       6: 二维数组传递:
       7: 定义是 int **value;的传递
       8: void Func(int **value);
       9: 定义是 int (*value)[n] = new int[m][n];的传递
      10: void func(int (*value)[n]); // sizeof(p)=4,sizeof(*value)=sizeof(int)*n;
    

    三、数组与指针关系

    1、数组名的内涵在于其指代实体是一种数据结构,这种数据结构就是数组;

    2、数组名的外延在于其可以转换为指向其指代实体的指针,而且是一个指针常量;

    3、指向数组的指针则是另外一种变量类型,(在win32平台下,长度为4),仅仅意味着数组存放地址。

    4、数组名作为函数形参时,在函数体内,其失去了本身的内涵,仅仅只是一个指针,而且在其失去其内涵的同时,它还失去了其常量特性,可以作自增、自减等操作,可以被修改。

    四、字符数组

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

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

    char movie_star[15] = “Marilyn Monroe”;

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

    char movie_star[] = “Marilyn Monroe”;

    五、内存泄露

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

    展开全文
  • object c 数组初始化

    千次阅读 2013-06-25 10:06:17
    当你用这个初始化函数时,把你要存储的对象一个一个传递进去。最后用一个 nil 符号结束这个列表以通知运行时列表什么时候结束。如果你不这么做, LLVM 编译器会抛出一个如下的异常: warning: Semantic Issue: ...

    -(void)initArray

    {

        NSString *strMsg =@"hello world!!!";

       NSNumber *class1 = [NSNumbernumberWithInteger:-345];

       NSNumber *class2 = [NSNumbernumberWithFloat:234.5];

        

       NSArray *myArray =[[NSArrayalloc]initWithObjects:

                           strMsg,

                           class1,

                           class2,

                          nil];

       NSLog(@"myArray=%@",myArray);

    }


    你可以看到,我们用initWithObjects:来初始化array。当你用这个初始化函数时,把你要存储的对象一个一个传递进去。最后用一个nil符号结束这个列表以通知运行时列表什么时候结束。如果你不这么做,LLVM编译器会抛出一个如下的异常:
    warning: Semantic Issue: Missing sentinel in method dispatch 

    我们也可以用NSArray类的 arrayWithObjects:方法来创建一个可自动释放的数组。像这样: 


    NSArray *array = [NSArrayarrayWithObjects:stringObject,
    signedNumber,
    unsignedNumber, nil]; 


    NSUInteger counter = 0;for (counter = 0;

    counter< [array count];
    counter++){
    id object = [array objectAtIndex:counter];NSLog(@"Object = %@", object);
    }



    NSString *stringObject = @"My String";
    NSNumber *signedNumber = [NSNumbernumberWithInteger:-123];

    NSNumber *unsignedNumber = [NSNumber numberWithUnsignedInteger:123];

    NSArray *anotherArray = [[NSArrayalloc] initWithObjects:
    @"String 1",
    @"String 2",
    @"String 3", nil];
    NSMutableArray *array = [[NSMutableArrayalloc] initWithObjects:stringObject,
    signedNumber, nil];
    [array addObject:unsignedNumber];

    [array removeObject:signedNumber];

    [array addObjectsFromArray:anotherArray];

    for (id object in array){
    NSLog(@"Object = %@", object);
    }



    展开全文
  • 在调用 addObject 方法之前,需要将初始化self.noteArray 数组: self.noteArray = [[NSMutableArray alloc] init]; 转载于:https://www.cnblogs.com/tuncaysanli/archive/2012/10/17/2727938.html

    示例代码如下所示,调用NSMutableArray 对象的addObject方法,但是 count 方法总是返回 0,什么原因呢?

    for (MyObject *obj in self.Array)
    {
    [self.noteArray addObject:obj];
    NSLog(@"Num items: %d", [self.noteArray count]);
    }

    这里,self.noteArray 是NSMutableArray 对象,[self.noteArray count] 总是输出0。

    出现上述问题的原因是:

    self.noteArray 没有初始化,仍然为nil,所以 count 方法返回0。

    在调用 addObject 方法之前,需要将初始化self.noteArray 数组:

    self.noteArray = [[NSMutableArray alloc] init];

    转载于:https://www.cnblogs.com/tuncaysanli/archive/2012/10/17/2727938.html

    展开全文
  • C语言中,数组初始化的方式主要有三种:1、声明时,使用 {0} 初始化;2、使用memset;3、用for循环赋值。那么,这三种方法的原理以及效率如何呢? 请看下面的测试代码:#defineARRAY_SIZE_MAX(1*1024*1024)void...
  • C++中有5种初始化,默认初始化、值初始化、直接初始化、拷贝初始化、列表初始化
  • 如果你这样做了,那么你的初始化方法需要调用一个NSArray类的指派初始化方法:init或initWithObjects:count:。NSArray类遵循NSCopying, NSMutableCopying以及NSCoding协议;如果你希望通过copy或code来实例化你的...
  • 背景Xcode 秉承了 Apple 封闭的传统,提供的可自定义的选项比起其他 IDE 来说是比较少的,不过在 Xcode 7 之前(包含 Xcode 7)我们还是可以通过插件实现 Xcode 的自定义,甚至还出现了像 Alcatraz 的专门的插件管理...
  • 即使便捷初始化程序不必将初始化委托给指定的初始化程序,便捷初始化程序也需要在某个时候调用指定的初始化程序 。 这是完全初始化正在初始化的实例所必需的。 有了两个模型类,现在该重构ViewController和...
  • swift的初始化与反初始化(init, deinit)

    千次阅读 2016-09-01 20:44:21
    学习swit语法,本文是讨论class的init()与deinit(),本人是做java出生,java的gc在swift中也得到了很好的解释,看swift初始化没有难度,当引用在代码中不在使用的时候,swift内存就要释放,deinit()方法就会被得到...
  • 【iOS】NSArray 数组类(Xcode文档翻译)

    千次阅读 2014-08-14 22:01:11
    如果你这样做了,那么你的初始化方法需要调用一个NSArray类的指派初始化方法:init或initWithObjects:count:。NSArray类遵循NSCopying, NSMutableCopying以及NSCoding协议;如果你希望通过copy或code来实例化你的...
  • iOS开发之基础类的简单初始化方法

    千次阅读 2014-03-14 07:46:47
    先上一个连接:Yak Shaving 文章是关于oc当中类的初始化的,在此大概翻译一下
  • Objective-C 二维数组详解

    万次阅读 2015-11-02 09:50:26
    在实际的项目开发中,二维数组也是常常用到的数据结构。OC中的二维数组也是通过...使用NSArray初始化的一维数组和二维数组都是不可变数组。 #import int main(int argc, const char * argv[]) { @autoreleasepool {
  • iphone之unichar和初始化

    千次阅读 2014-10-21 10:07:35
    但在xcode中,初始化unichar是个问题。如果像下面这样声明,会有warning "Multi-character character constant"。 unichar a = '国'; 这是因为C语言中两个单引号只能用于char。可以采用直接写文字编码的方式来初始...
  • 并不是数组的类型定义数组时,数组的长度可以是常量、常量表达式和宏定义不能是变量,但是在xcode下被优化可以使用变量,但是如下形式定义的数组xcode下的初始化是不行的:  int len = 3, a[len] = {1,2,3};//...
  • 3.10 数组

    2016-11-19 15:20:37
    数组是相同类型的数据放在一起存储的结果。可以通过序号来引用任何...//此时b的长度是100,可以存放100个int元素,但是内部每个元素是没有初始化的//声明数组,设置数组长度,并对每个元素进行初始化 int[] c = new int
  • Flutter(7)— Flutter Engine初始化(上)一、准备Flutter Engine源码看源码工具VSCode相关插件语言问题二、Flutter Engine初始化1. 启动过程的Native初始化A. 加载Flutter EngineB. 第一个native方法C. ...
  • 前言 从事iOS最经常遇到的莫过于 测试同学过来 通知你 赶紧发个包 ~ ~ 。。然后一顿操作。作为一个有着多年iOS开发经验的程序猿,肯定不能再走寻常路,遂决定亲自写个脚本 ps: 其实是python忘的...脚本工具: Xcode...
  • SDL2源代码分析1:初始化(SDL_Init())

    万次阅读 多人点赞 2014-11-01 15:46:06
    SDL2源代码分析1:初始化(SDL_Init()) SDL2源代码分析2:窗口(SDL_Window) SDL2源代码分析3:渲染器(SDL_Renderer) SDL2源代码分析4:纹理(SDL_Texture) SDL2源代码分析5:更新纹理(SDL_UpdateTexture()) ...
  • 初始化的bool成员变量在Debug下默认值为false,Test下默认true。一个bug查了一晚上,原因就是这个. 人物创建的场景在Debug下正常,在Test和Release下不正常,就是镜头不对。然后就盯着这个载入场景的配置文件的...
  • Swift基础(四)数组

    2016-07-11 15:33:05
    // Swift 的类型推断:如果使用数组字面量来初始化一个数组,那么这个数组字面量的值具有相同的类型,可以不必明确这个数组的类型。  var teachers = ["Mr. Wang", "Mr. Liu"];  // 因为teachers数组字面量中的...
  • Xcode 9

    千次阅读 2017-09-20 11:53:22
    Xcode 9 Xcode 9兼容性 Xcode 9需要Mac运行macOS 10.12.6或更高版本。 Xcode 9包括iOS 11,WatchOS 4,macOS 10.13和tvOS 11的SDK。 Xcode 9.0 一般 新功能 在导航和助手...
  • let fruits = NSArray(objects: "Apple", "Banana", "Orange")//初始化一个数组对象,数组储存在相同类型的数值有序表内 //创建一个字符串对象表示文档目录下的一个属性列表文件 let fruitePath:String = ...
  • 数组介绍

    2015-06-30 23:30:00
    概念:什么是数组?  数组就是若干个有序的相同数据类型的元素的集合。  数组是构造类型,数组元素既可以是基本数据类型也可以是构造类型。例如二维数组或者多维数组数组元素本身也是个数组,也就是构造类型...
  • 5、数组

    2015-10-27 15:02:18
    数组元素:构成数组的数据。 数组下标:数组元素位置的索引 数组维度:数组下标的个数 分类 数值数组:用来存储数值 字符数组:用来存储字符 ‘a’,而不是“a” 指针数组:用来存放指针(地址) 结构数组:用来存放一...
  • 两种初始化:静态初始化与动态初始化 静态初始化:指定个数,但没有全部初始化,则剩下的自动为0 如:a[4]={};   制定个数,并全部初始化 制定个数,但没有初始化,则全部为0,但注意 是有了“ { }”,表明...
  • 记录下appium文档关键字,方便查找: https://appium.io/docs/cn/writing-running-appium/caps/#xcuitestios 键 描述 ... 自动测试的引擎 Appium(默认)或者Selendr...
  • c语言数组

    2014-10-19 21:24:00
    数组 一: 1、什么是数组? 一组 相同类型 的 若干 个 有序 的数据集合 2、数组的名词: 1)数组名:带表一组相同类型若干个有序的数据集合() 2) 数组元素:构成数组的每一个元素 3)下标:数组是有序的...
  • C语言——指针数组

    2021-04-16 16:16:31
    一、指针数组的概念 一个数组的元素值为指针的数组是指针数组。 1)首先是一个数组,满足数组的属性和适用于数组的使用方法; 2)数组的每一个元素都是指针。 指针数组是一组有序的指针的集合。 指针数组的所有元素...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,682
精华内容 4,272
关键字:

xcode 初始化数组