精华内容
下载资源
问答
  • 关于初始化int数组

    千次阅读 2018-05-23 22:24:51
    关于C++初始化int数组 在做题目时,我发现经常使用的memset()在把int数组初始化为1时失去了作用: memset()只能将数组初始化为-1或0 memset()函数初始化出现问题的原因 memset()本来是用来初始化char型数组...

    关于C++初始化int数组

    在做题目时,我发现经常使用的memset()在把int数组初始化为1时失去了作用:

    • memset()只能将数组初始化为-1或0

    memset()函数初始化出现问题的原因

    memset()本来是用来初始化char型数组的,所以我们可以想到memset()函数是一个个字节对数组进行初始化的。然而,int型的数据占4个字节。memset()之所以可以把int型数组初始化-1或0,就是因为他们是特殊情况,他们的二进制补码分别表示为全为1和全为0,这才导致可以初始化int数组的原因,可如果我想初始化为1怎么办呢。

    用C++函数初始化数组

    用fill()函数初始化数组

    fill()函数的头文件是#include <algotithm>,下面是代码块:
    
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    
    int main() {
        int arr[1000];
        fill(arr, arr+1000, 1);
        return 0;
    }
    

    用fill_n()函数初始化数组

    fill_n()函数的头文件同样是#include<algorithm>,下面是代码块:
    
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    
    int main() {
        int arr[1000];
        fill_n(arr, 1000, 1);
        return 0;
    }

    小方法:只是如果每次不想记住自己的数组开了多大的话,用int s = sizeof(arr)/sizeof(int); 就好。只不过这样要记住类型。

    这个方法可以扩展到其它类型的数组。

    初始化二维数组

    用arr[SIZE][SIZE]作为例子。
    fill(arr[0], arr[0]+SIZE*SIZE, INF);
    INF为你要填入的数字。

    展开全文
  • 【C++】别再用memset初始化int数组了,用fill或者fill_n用memset把int数组初始化为0是没问题的,但是要初始化成其他的数值,比如说-1或者别的什么数字,那就会报错,原因在于memset是以字节单位进行填充的详细的见...

    【C++】别再用memset初始化int数组了,用fill或者fill_n


    用memset把int数组初始化为0是没问题的,但是要初始化成其他的数值,比如说-1或者别的什么数字,那就会报错,原因在于memset是以字节为单位进行填充的

    详细的见百度百科https://baike.baidu.com/item/memset

    其实想想也好理解,memset本来就是 < cstring >里面的函数,用处也主要是给char类型的字符串赋初值,用在int类型数组本来也就是不合理的用法。

    那么我们要给int数组填充非0的元素怎么办呢?

    我们要用到fill函数,或者fill_n函数,示例代码如下:

    #include <iostream>
    using namespace std;
    int main()
    {
        int a[10];
        fill(a,a+10,20);//三个参数,前面两个是地址,最后一个是填充值
    
        for(int i = 0;i<10;i++)
            cout <<a[i] << " " ;
        cout << endl;
    
        fill_n(a,5,-3);//三个参数,第一个是地址,第二个是个数,最后一个是填充值
        for(int i = 0;i<10;i++)
            cout <<a[i] << " " ;
        cout << endl;
    
        return 0;
    }

    用这两个函数可以给int数组初始化任何数值,反正比memset靠谱多了。


    输出结果:

    20 20 20 20 20 20 20 20 20 20
    -3 -3 -3 -3 -3 20 20 20 20 20


    欢迎交流,欢迎评论。


    参考资料:
    http://en.cppreference.com/w/cpp/algorithm/fill
    http://en.cppreference.com/w/cpp/algorithm/fill_n

    展开全文
  • c/c++ int数组初始化/重置为0

    万次阅读 2017-09-04 11:21:55
    1、int数组其实初始化的时候默认就是全部为0 int a[1000]; int a[1000] = {0}; 以上2种写法其实都可以 注意:int a[1000] = {0};这种方法如果想把整形数组a都初始化为1就不能用了 比如int a[1000] ...
    1、int数组其实初始化的时候默认就是全部为0
    


    int a[1000];
    int a[1000] = {0};


    以上2种写法其实都可以


    注意:int a[1000] = {0};这种方法如果想把整形数组a都初始化为1就不能用了
    比如int a[1000] = {1};//数组其实是被初始化成1,0,0,0,0


    2、int数组重置为0



    如果是在定义以后想全部赋为0,用memset()函数是比较快的。


    int a[SIZE];
    memset(a, 0, sizeof(a));
    memset(a, 0, sizeof(int)*1000);//这里的1000是数组大小,需要多少替换下就可以了。 


    注意:memset在头文件string.h里
    展开全文
  • C/C++ int数组初始化

    万次阅读 2019-01-19 14:21:02
    //定义了数组array,但并未对数组初始化; 静态数组 int array[100] = {0}; //定义了数组array,并将数组元素全部初始化为0; 静态数组 int array[100] = {1}; //定义了数组array,并将数组第一个元素初始化为1,...

    一、一维数组

    C/C++初始化

    1. 静态数组 int array[100]; //定义了数组array,但并未对数组初始化;
    2. 静态数组 int array[100] = {0}; //定义了数组array,并将数组元素全部初始化为0;
    3. 静态数组 int array[100] = {1}; //定义了数组array,并将数组第一个元素初始化为1,后面99个元素初始化为0;
    4. 静态数组 int array[100] = {4,5}; //定义数组array,并初始化前两个元素为4,5,后面剩余元素初始化为0;

    C++动态数组初始

    1. 动态数组 int *p_array = new int[100]; delete []p_array; //分配了长度为100的数组array,并全部初始化为0;
    2. 动态数组 int *p_array = new int[100]{3,5}; delete []p_array; //前两个元素初始化为3和5,后面的原始初始化为0;

    曾经我想将int数组元素全部初始化为1,我以为下方的写法没有问题:

    int a[5] = { 1 }; // 曾经我想全部初始化为1

    事实却是,只有数组的第一个元素被初始化为1,其他全为0;

    数组初始化列表中的元素个数小于指定的数组长度时,不足的元素补以默认值。

    对应基本类型int来说,就是补0,再看一下非基本类型的数组:

    string a[5] = { "foo" };
    

    有了上面的规则,就很容易知道其实相当于:

    string a[5] = { "foo", "", "", "", "" };
    

    即后面4个元素调用了string的默认构造函数进行的初始化,而第一个则调用的string::string(const char*)进行的初始化。

    还有一个区别:

    int a[5];
    string a[5];
    

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

    注意,在C++11中中间的赋值号可以省略,即 int a[5]{1};并且,如果初始化列表为空,如 int a[5]{},那将初始化所有元素为默认值,即与 int a[5]{0}; 等级

    二、二维数组

    C/C++初始化

    1. 静态 int array[10][10]; //定义数组,并未初始化(脏数据)
    2. 静态 int array[10][10] = {{1},{2,2},{3,3,3}}; //数组初始化了array[0][0]及array[1][0,1]及array[2][0,1,2],剩余元素初始化为0;

    C++动态数组初始

    1. 动态 int (*array)[n] = new int[m][n]; delete []array; //默认初始化为0;
    2. 动态 int *array = new int[m]; for(i) array[i] = new int[n]; for(i) delete []array[i]; delete []array; //多次析构,默认初始化为0;
    3. 动态 int *array = new int[m][n]; delete []array; //数组按行存储,默认初始化为0

    三、三位数组

    C++动态数组初始
    int *array = new int[m][3][4]; //只有第一维可以是变量,其他维数必须是常量,否则会报错
    delete []array; //必须进行内存是否,否则内存将泄漏;

    四、数组作为参数形式传递

    一维数组传递

    1. void func(int *array);
    2. void func(int array[]); //真实使用时,一般还需要给数组大小

    二维数组传递

    1. void func(int **array);
    2. void func(int (*array)[n]);

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

    五、数组重新置0

    char数组

    char a[10];
    memset(a,0,sizeof(a));		//将每个元素设置为0
    memset(a,1,sizeof(a));		//将每个元素设置为1
    memset(a,'a',sizeof(a));	//将每个元素设置为a,‘a’ = 97 (ASCII码)
    也就是说第二个元素要在ASCII码范围内(0~127)

    int数组

    int a[10];
    memset(a,0,sizeof(a));	//将每个字节设置为0,此时每个int元素正好也为0
    memset(a,1,sizeof(a));	//将每个字节设置为1,此时每个int元素为16843009 = 0x1010101
    // 0x1010101 = 1000000010000000100000001(二进制)
    

    int数组示例

    #include <stdio.h>
    #include <string.h>
    
    int main ()
    {
    	int array[10];
    
    	memset(array,0,sizeof(array));
    	for(int i=0; i<10; i++)
    	{
    		printf("%d\n",array[i]);//输出0
    	}
    	
    	memset(array,1,sizeof(array));
    	for(int i=0; i<10; i++)
    	{
    		printf("%d\n",array[i]);//输出16843009
    	}
    	
    	return(0);
    }
    

    memset原型

    声明:

    void *memset(void *str, int c, size_t n)
    

    将str中前n个字节用 c 替换并返回 str。
    其实这里面的ch就是ascii为ch的字符;
    将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASCII值;

    memset()的功能是对str的每一个字节进行ASCII赋值,int占四个字节,所以对int数组进行非0赋值或初始化时不能用memset()函数,只能循环处理/定义时初始化;

    参考资料:
    https://www.cnblogs.com/SarahZhang0104/p/5749680.html

    展开全文
  • 看到C++将数组初始化为0的这个用法: int a[100] = {0};// 初始化一个全0的数组 ...究其原因,正如C/C++ int数组初始化中所述,数组初始化列表中的元素个数小于指定的数组长度时,不足的元素补以默认值...
  • 本文实例讲述了C#中数组初始化数组元素复制的方法。分享给大家供大家参考。具体如下: 下面的代码演示如何创建和初始化数组,以及C#中如何将数组元素从一个复制到另外一个的方法。 using System; public class ...
  • 数组属于引用数据类型,在使用前必须初始化,否则会报...int[ ] data=new int [5] :声明并开辟一个长度5的数组 数组通过下标索引来获取元素,下标默认从0开始。数组下标超出数组长度,数组越界异常(运行时...
  • 静态初始化数组的长度必须是在程序中确定的常数,不能是由用户输入的变量 例子: int a[10];//正确 Student stud[10];//正确:Student是一个学生类 int n;cin>>n;int a[n];//错误 int n;cin>>n;Student stud[n];/...
  • 错误 return new int[1]{shorter*k}; error: array creation with both dimension ...数组的使用分声明和初始化两部分,两者可同时进行,也可分开进行int[] array; 声明 int[] array = new int{element1,elemen
  • [Unity][C#][数组]int数组初始化

    千次阅读 2020-03-05 16:29:34
    int[] int_1 = {1,2,3,4,5 }; creature_1.Stats = new int[3] { 101,102,103 }; 参考资料: 1. 各种C#数组的定义和初始化 各种C#数组的定义和初始化 2. 3. ...
  • 数组的定义及初始化 func main() { var a [4]int //按... b := [4]int{2, 5} //按数组长度,没有初始化的自动初始化为0 c := [4]int{5, 3: 10} e := [...]int{10, 2: 100} d := [...]int{1, 2, 3} fmt.Println
  • java对象数组 创建对象数组初始化对象数组

    万次阅读 多人点赞 2019-07-30 16:34:15
    对象数组的定义与一般数组的定义类似,但是需要每一个元素实例。 对象数组的声明形式是: 类名 对象数组名 [ ]; 对象数组分配内存空间: 对象数组名=new 类名[数组长度];//注意 :此处不是构...
  • java数组初始化以及数组拷贝

    千次阅读 2017-03-20 18:19:54
    1.数组的声明  int[] a ;//这里只是声明了变量a,并没有将a初始化为一个真正的数组  int[] a = new int[100];//这里创建了一个可以存储100个整数的数组,当...2.数组初始化  int[] a = {2,4,5,7,8};//数组的长度由
  • 但如果定义成局部数组,则必须要先初始化 int a[10]; memset(a,0,sizeof(a)); 一般开全局数组比较大,最大约等于5*10^8,也就是开不到10^9级别的数组,当遇到这种情况,可以考虑离散化。 所以一般全局...
  • #include<stdio.h>... int i=0; for(;i<10;i++) { printf("第%d个元素的值是%d\n",i+1,arr[i]); } } 运行结果: #include<stdio.h> int main(int argc,char*argv[]) { int
  • #include <string.h>///memset需要头文件<string.h>(c语言) 或 <cstring>(c++语言) struct node { int w1, w2, w3;...///结构体数组可以直接memset初始化 return 0; } ...
  • 突然想起来前几天同学问我什么没有初始化数组的值是随机的,发现这个困惑自己也是存在的,所以自己总结的心得. 1. 首先,并不是所有未初始化数组的值都是随机的.对于没有初始化数组,分两种情况:  (1)全局...
  • 对于整数型数组,若要是初始化为非0的值时应该使用for循环 而对于字符型 或 0 应该使用memset 函数 如下是可以的,能把数组中的元素值都设置成字符1, #include &lt;iostream&gt; #include &lt;...
  • int数组默认初始化

    千次阅读 2014-09-19 17:09:08
    如果是 int [] a ; 这么写的话a的值肯定是null 如果是 int [] a=new int [10]; 这样的话 每个值(a[0] a[1] a[2])就都是0
  • 这得看数组的申明情况:1、全局/静态数组 如果申明的是全局/静态数组,系统会把数组的内容自动初始化为0。2、局部数组 如果申明的是局部数组数组的内容会是随机的,不一定是0。如函数内声明: int Func() { char ...
  • a = new int[4]动态初始化:for (int i=0i;i++){ a[i] = i; }默认初始化数组元素相当于对象的成员变量,默认值跟成员变量的规则一样。数字0,布尔false,char\u0000,引用:null;静态初始化: a[]={1,2,3,4}...
  • C、C++数组初始化数组赋值

    万次阅读 2013-03-22 19:11:58
    原文发于:... 在C/C++中,可以在数组定义的时候对其进行初始化int a1[3] = {1, 2, 3}; int a2[3] = {0}; //将数组a2各个元素赋值为0int a3[] = {1, 2, 3}; char s1

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 808,997
精华内容 323,598
关键字:

初始化int数组为0