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

    2021-04-25 21:24:56
    通过如下代码初始化一个数组初始化的规则就是不足数组大小的按默认值补位 int a[5]; //int默认0 int b[5] = {1,2}; // {1,2,0,0,0} 不足5位的0补位 string c[5] = {"a", "b"}; // {"a","b","","",""} 如果不明确...

    数组是底层数据类型,存放在栈中,其内存的分配和释放完全由系统自动完成.
    通过如下代码初始化一个全局变量数组,初始化的规则就是不足数组大小的按默认值补位

    int a[5]; //int默认0
    int b[5] = {12}; // {1,2,0,0,0} 不足5位的0补位
    string c[5] = {"a", "b"}; // {"a","b","","",""}
    

    如果不明确指出初始化列表,那么基本类型是不会被初始化的(全局变量、静态变量外); 类类型如string则会为每个元素调用默认构造函数进行初始化。
    所以建议使用如下方式初始化,局部变量也会初始化

    int a[5]{}; //c++11新写法
    

    动态数组

    动态数组是通过new创建在堆上的数组

    int *a = new int[5]; //没有初始化
    int *b = new int[5] {1,2}; // {1,2,0,0,0} 不足5位的0补位
    string *c = new string[5]{"a", "b"}; // {"a","b","","",""}
    

    动态数组如果不明确指出初始化列表,那么基本类型是不会被初始化的(全局变量也没有初始化,静态变量外),所有的内存都是“脏的”。
    new还有一种写法,会初始化

    int* a = new int[5]();//初始化{0,0,0,0,0}
    

    加了括号的意思是使用默认值初始化整个数组

    赋值

    memset

    memset可以为上述数组重置,由于memset按字节对内存块进行初始化,所以不能用它将int数组初始化为0和-1之外的其他值(除非该值高字节和低字节相同)。

    memset(void *s, int ch,size_t n);
    int a[5];
    memset(a, 511, sizeof(int)*5);// 511的二进制码后八位都为1,与-1相同
    //{-1,-1,-1,-1,-1}
    

    memset赋值采用输入的第四个字节,因为511二进制码 (00000000 00000000 00000001 11111111),最后一个字节与1的二进制码 (11111111 11111111 11111111 11111111),四个字节都相同,所以可以赋值。
    前面提过,如果我们想初始化的值高位字节和低位字节相同(0和-1的每个字节都相同),也可以用memset赋值。

    fill

    fill() 和 fill_n() 算法提供了一种为元素序列填入给定值的简单方式,可以用于多种序列,这里列出初始化数组的样例,感兴趣再做探索

    int a[5];//这里a按全局变量定义,则都初始化为0
    fill(a,a+2,1); // {1,1,0,0,0}
    

    参考
    memset
    C/C++数组初始化的一些误区
    C++ fill和fill_n函数用法详解

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

    2021-04-27 10:47:52
    c++数组初始化写法 1.buf[size] = {0}; char buf[4] = {0}; 上述代码执行以后,整个buf都初始化为0,跟我们大部分人的预想是一样。 2.buf[size] = {value}; // value != 0 char buf[4] = {1}; 上述代码执行...

    c++数组初始化写法

    1.buf[size] = {0}; 

    char buf[4] = {0};

    上述代码执行以后,整个buf都初始化为0,跟我们大部分人的预想是一样。

    2.buf[size] = {value};  // value != 0

    char buf[4] = {1};

    上述代码执行以后, buf里的值是[0x1, 0x0, 0x0, 0x0]。  可能很多人会认为整个数组都会初始化成0x1,但是实际上不是的。

    3. 那么我们要把buf初始化成全是0x1, 该怎么写。

    char buf[4] = {0x1, 0x1, 0x1, 0x1};

    或者

    char buf[4];
    memset(buf, 0x1, sizeof(buf));

    为什么 = {0}可以初始化成功, 而 = {1}只能初始化第一个char?

    情况1:初始化数组时,给所有元素都附上值,这是一个好习惯,代码无歧义。 缺点就是数组很长时, 代码冗余难写。

    情况2:初始化数组时,只有前面若干元素有指定赋值, 如果省略没赋值的,按照默认构造函数来构造元素。这是 = {0}符合预期, 而={1}不符合的原因,因为char默认构造为0了,而且这个看编译器,你很难明确编译器是否默认构造为0。因此强烈建议不要使用这种方式来初始化。


    总结:

    代码要正确,也要明确。所有带有歧义的用法我们都要避免。

    因此数组的初始化建议都用memset函数来实现。

    如果不是char数组,而是int数组的话,可以通过for循环来初始化。

     

    展开全文
  • (C++)字符数组初始化的两种方法

    千次阅读 2021-03-19 19:32:10
    #include<cstdio> //字符数组的两种赋值方法 int main(){ //1.... char str1[14] = {'I',' ','l','o','v','e',' ','m','y',' ','m','o','...方法二,直接赋值字符串(注意,只有初始化时可以这么做) char str2
    #include<cstdio>
    //字符数组的两种赋值方法 
    
    int main(){
    	
    	//1.方法一
    	char str1[14] = {'I',' ','l','o','v','e',' ','m','y',' ','m','o','m','.'};
    	
    	for(int i = 0;i<=13;i++){
    		printf("%c",str1[i]);
    	}
    	printf("\n");
    	//2.方法二,直接赋值字符串(注意,只有初始化时可以这么做) 
    	char str2[15] = "I love my mom.";
    	for(int j = 0;j<=13;j++){
    		printf("%c",str2[j]);
    	}
    	return 0;
    } 
    

    在这里插入图片描述

    展开全文
  • C++类的Const数组初始化要实现的功能如下完整源代码实现如下 要实现的功能如下 //以下数据成员 const int a[3]//怎么初始化? class A { public: A(){} ~A(){} private: const int a[3]; }; 完整源代码实现如下...

    C++类的Const数组的初始化

    要实现的功能如下

    //以下类数据成员 const int a[3]//怎么初始化?
    class A
    {
       
    public:
    A(){
       }
    ~A(){
       }
    private
    展开全文
  • C++ 类中const数组如何初始化 (1)构造函数的初始化列表 const初始化的地方,不可以在构造函数体内赋值 (2)初始化列表初始化的写法跟普通数组一样,注意写法 # include <iostream> using namespace ...
  • 数组初始化方式: 2.vector六种初始化方式: 3.string初始化方式: 4.string也能push_back()和pop_back() 5.string的插入删除操作 1.数组初始化方式: https://www.cnblogs.com/yyzyxy/p/10336480.html 2.vector六种...
  • C++ new动态数组初始化

    2021-02-25 16:46:26
    //strlen函数是不包括‘\0’...//C++ new动态数组初始化 void testnew( const char* str ) { if (!str){ m_pdata = 0; } else{  int len = strlen(str); m_pdata = new char[len + 1]; strcpy(m_pdata,str); .
  • C++数组初始化

    2021-01-10 23:42:06
    何为数组? 一块连续的,大小固定并且里面的数据类型一致的内存空间 啥?不理解?...数组初始化的三种结构: 1、数据类型 数组名称[长度n] = {元素1,元素2…元素n}; 2、 数据类型 数组名称[] = {元
  • 有时在程序设置变量值比输入变量值更合适。但是,为数组的各个元素编写单独的赋值语句可能意味着大量的输入,对于大型数组而言尤其如此。例如,来看一个程序:#include #include using namespace std;int main(){...
  • C++11数组初始化方法

    2021-02-01 18:43:29
    // 可省略(=) double earnings[4] {1.2e4, 1.6e4, 1.1e4, 1.7e4}; // okay with C++11 // {} 内可不包含任何东西,默认全为0 unsigned int counts[10... // 列表初始化禁止缩窄转换 // long plifs[10] = {23, 34,
  • C++给二维数组初始化的方法:首先定义两个整型变量,并给二维数组初始化不同的数值;然后用二重循环,输出数组的各个数值;最后用大括号括起来的数字直接赋值。本文操作环境:Windows7系统,Dev-C++ 5.2.0.3版本,...
  • C++数组初始化方法

    2020-12-31 08:50:11
    //array of 10 uninitialized ints此new表达式分配了一个含有 10 个int型元素的数组,并返回指向该数组第一个元素的指针,此返回值初始化了指针pia。在自由存储区创建的数组对象是没有名字的,只能通过其地址间接...
  • c++整形数组初始化

    2021-07-26 14:52:58
    1、若数组不是全局变量:不会没有默认初始化,需要我们手动初始化 (1)完全不初始化 :输出原内存上的数字 (2)部分初始化初始化的数字不变,未初始化的数字默认为0 2、数组为全局变量 :默认初始化为0. ...
  • 满意答案adwffrtkk2018.06.07采纳率:59%等级:9已帮助:819... // a是一个double 类型的长度为10动态数组 TArray b; // b是一个double 类型的尚未确定其长度的动态数组 b.SetLen(7); // 使b成为一个长度为7的动态数...
  • 如果一个有默认的构造函数,使用new动态实例化一个对象数组不是件难事,如下代码: class animal { public: animal():num(0) ...想要初始化对象数组的同时指定各个构造函数的参数,有以下几种解...
  • 动态数组初始化: 对于内置数据类型元素的数组,必须使用()来显示指定程序执行初始化操作,否则程序不执行初始化操作: int *pia = new int[10]; // 每个元素都没有初始化 int *pia2 = new int[10] (); // 每个...
  • C++:vector二维数组初始化

    千次阅读 2021-03-31 15:12:37
    在刷 LeetCode 的时候需要初始化创建一个行大小为r、列大小为c的 vector 二维数组,具体的实现方法如下: vector<vector<int>> num(r, vector<int>(c)); 初始化创建r个类型为vector<int>,...
  • 把那个struct当成一个普通的int[14]理解就好啦,就是二维数组初始化,你可以像这样打印出来看看。#include using namespace std;typedef struct{uint8_t a;uint8_t b[10];uint8_t c[3];}basic;int main(){basic ...
  • 关于C++ new动态创建对象数组初始化的方法 #include <iostream> #include <string> #include <stdlib.h> class student{ private: static int object_count; int score; string name; ...
  • C++使用memset快速初始化数组,用实例说明了数值型和字符型初始化的区别
  • 发现了一个字符数组初始化的误区,而这个往往能导致比较严重的性能问题,分析介绍如下:往往我们在初始化一个字符 数组,大概有如下几种写法:1 char array1[1024] = "";2 char array2[1024] = {0};3 char array3...
  • 定义一维数组: 方法1: ​ 例: int a[5]={4,5,1,2,3}; for (int i=0;i<=4;i++) { cout<<a[i]<<" " } ​ 举个栗子: #include <bits/stdc++.h> int year,month,day,s=0; ...
  • 1.memset #include <iostream>...//所以不能用它将int数组初始化为0和-1之外的其他值 void main() { int q[10]; memset(q, -1, sizeof(q)); for (int i = 0; i < 10; i++) cout << q[i] .
  • 1.先定义再初始化 例子: Int S[2]; S[1]=1; S[2]=2; 2.定义时初始化 例子: Int S[2] = {1,2}; 3.不规定长度的初始化 Int S[] = {1,2};
  • 如果变量类型在前面只用int限定是无法通过编译的;如下: #include <iostream> #include <vector> using namespace std; #include <algorithm> int main() { int elem_seq = 10;...int>
  • 数组是包括地址和内容的,关于char数组和char*的问题可参考char *和char数组的区别(深拷贝和浅拷贝的观点)以及内核访问用户空间 - OSCHINA - 中文开源技术交流社区 结构体运算符重载见:C++结构体排序(运算符重载...
  • 定义变量时一定要进行初始化,尤其是数组和结构体这种占用内存大的数据结构。在使用数组的时候经常因为没有初始化而产生“烫烫烫烫烫烫”这样的野值,俗称“乱码”。 每种类型的变量都有各自的初始化方法,memset() ...
  • 定义时进行初始化: char ch[20]="cpp"; //ok cout << ch << endl; 仅定义不初始化 char ch[20]; ch = "cpp";//出现”表达式必须是可修改的左值“的错误提醒,编译报错“不可指定数据类型”。 ...
  • C++数组初始化

    2021-09-12 20:36:22
    int a[100]={-1}仅仅将第一个元素初始化为-1 方法是可以循环赋值为-1 for(int i=0;i<n;i++) a[i]=-1;

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 256,931
精华内容 102,772
关键字:

c++类中数组初始化

c++ 订阅