c++中用memset初始化数组可以初始化任何值吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++中用memset初始化数组可以初始化任何值吗?相关的知识,希望对你有一定的参考价值。

不行。memset只能把一块连续内存里的所有字节设成一样的。

memset也不是C++的函数,我猜你想要的是fill的效果。
参考技术A 可以。 点击看详细结构体TempleA点击看详细点击看详细诠释一个;点击看详细;

中国TempleA一个;点击看详细AA = 0;点击看详细TempleB B;点击看详细B = A;点击看详细// BA不一定0。 ~~更成功转让也行。只要一个结构类型。

C++中数组的构造函数初始化列表

【中文标题】C++中数组的构造函数初始化列表【英文标题】:constructor initialization list for an array in c++ 【发布时间】:2017-12-13 11:48:47 【问题描述】:

我在下面有一个创建学生成绩记录的课程。构造函数为数组分配内存并为数组中的每个元素设置一个默认值。我必须传入这个默认值的值。我的问题是,我可以使用构造初始化列表或任何其他方式分配内存并初始化数组的值吗?我不使用动态分配newdelete

 //header file for main.cpp

#include<iostream>

using namespace std;

const int SIZE = 5;
template <class T>
class StudentRecord

    private:
        const int size = SIZE;
        T grades[SIZE];
        int studentId;
    public:
        StudentRecord(T defaultInput);//A default constructor with a default value
        void setGrades(T* input);
        void setId(int idIn);
        void printGrades();
;

template<class T>
StudentRecord<T>::StudentRecord(T defaultInput)

    //we use the default value to allocate the size of the memory
    //the array will use
    for(int i=0; i<SIZE; ++i)
        grades[i] = defaultInput;




template<class T>
void StudentRecord<T>::setGrades(T* input)

    for(int i=0; i<SIZE;++i)
    
        grades[i] = input[i];
    


template<class T>
void StudentRecord<T>::setId(int idIn)

    studentId = idIn;


template<class T>
void StudentRecord<T>::printGrades()

    std::cout<<"ID# "<<studentId<<": ";
    for(int i=0;i<SIZE;++i)
        std::cout<<grades[i]<<"\n ";
    std::cout<<"\n";



#include "main.hpp"

int main()

    //StudentRecord is the generic class
    StudentRecord<int> srInt();
    srInt.setId(111111);
    int arrayInt[SIZE]=4,3,2,1,4;
    srInt.setGrades(arrayInt);
    srInt.printGrades();

    return 0;

【问题讨论】:

有什么理由不能使用 std::vector? C++ 没有运行时可变长度数组,除非通过内存分配。因此,您的选择是使用分配或使用一个足够大的数组以实现 SIZE 的最大可能值并存储每个对象中使用的实际数字。 【参考方案1】:

是的,你可以。下面是一个例子。 Here you can see it working:

class A

        int valLen;
        int* values;
        vector<int> vect;

    public:
        A(int len, ...)
        
            va_list args;
            va_start(args, len);
            valLen = len;
            for(int i=0; i<valLen; i++)
            
                vect.push_back(va_arg(args, int));  
            
            values = &vect[0];
            va_end(args);
        

        void print()
        
            for(int i=0; i<valLen; i++)
                cout << values[i]<<endl;
        
;

int main()

    A aVals[] =A(3, 50,6,78), A(5, 67,-10,89,32,12);

    for(int i=0; i<2; i++)
    
        aVals[i].print();
        cout<<"\n\n";
    
    return 0;

注意:构造函数的第一个参数是数字count,即要传递的值的数量。如果count 是固定的,那么您可以跳过并在constructor 中进行适当的更改。

【讨论】:

你不是在这里创建一个包含 5 个对象的数组,每个对象都有自己的值吗?我在问如何创建一个对象,该对象具有一个名为 grades 的变量,该变量是一个存储 5 个值的数组。所以我想知道是否可以使用构造初始化列表来初始化该数组的值?

以上是关于c++中用memset初始化数组可以初始化任何值吗?的主要内容,如果未能解决你的问题,请参考以下文章

C++中数组的构造函数初始化列表

C++ memset

为啥memset不能将数组元素初始化为1?(急)

如何将二维数组的所有元素初始化为java中的任何特定值

使用 memset 初始化整数数组而不是像 array[10]=0 这样的默认零初始化是不是有任何性能优势?

C++ 函数传递数组