Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在c++;?_C++_Pointers_Malloc - Fatal编程技术网

C++ 如何在c++;?

C++ 如何在c++;?,c++,pointers,malloc,C++,Pointers,Malloc,我想声明一个存储在指针a中的数组 int length = 8; int *A; A = (int*) malloc(length*sizeof(int)); A = {5, 1, 3, 5, 5, 2, 9, 8}; 但是,数组不能像上面那样初始化。错误为“无法在赋值中转换为'int'。如何解决此问题 另外,在声明数组(指针)时,C++中是否需要MalOC和MeMSET?< /P> 谢谢 使用new而不是malloc,它返回T*而不是void*,并支持异常: int *A = new int

我想声明一个存储在指针a中的数组

int length = 8;
int *A;
A = (int*) malloc(length*sizeof(int));
A = {5, 1, 3, 5, 5, 2, 9, 8};
但是,数组不能像上面那样初始化。错误为“无法在赋值中转换为'int'。如何解决此问题

另外,在声明数组(指针)时,C++中是否需要MalOC和MeMSET?< /P>


谢谢

使用new而不是malloc,它返回T*而不是void*,并支持异常:

int *A = new int[length];
快速回答:

A[0] = 5;
A[1] = 1;
A[2] = 3;
A[3] = 5;
A[4] = 5;
A[5] = 2;
A[6] = 9;
A[7] = 8;
基本上,当你说“A=”你正在改变“A指的是什么”时。如果要更改“A指向的值”,必须使用
[]
*

编辑

< >我必须警告你,在C++中使用<代码> MalOC 不是很好的做法,因为它不会初始化破坏复杂的对象。

如果您有:

int length=8;
class C_A {
    C_A() {
        std::cout << "This cout is important" << std::endl;
    }
    ~C_A() {
        std::cout << "Freeing is very important also" << std::endl;
    }
};

C_A* A;
A = (C_A*) malloc(length*sizeof(C_A));
free(A);

不需要。您不需要
malloc
将数组声明为指针,因为数组本质上是指针。使用
malloc
或no的区别在于,当使用
malloc
时,数组是在堆中声明的,而不是在堆栈中声明的

其次,您可以直接填充数组,当且仅当您在声明时填充数组时,例如。 这是正确的:
inta[3]={1,2,3}

这是错误的:

inta[3];

a={1,2,3}

使用malloc()和memcpy()实现所需功能的合理有效方法是


忘记C++中的MalCube()。对于memset,可以使用std::fill(A,A+sizeof(A),0)。@return0,
malloc
仅在特定情况下有效。我绝对建议至少在你明白原因之前不要靠近。这对
std::vector
会更好<代码>标准::向量A{5,1,…,8}
@chris您建议的实现std::vector A{…}似乎编译不正确。错误是-std=c++11的“扩展初始值设定项列表仅可用于…”,对吗?是的,它是C++ 11的特性。当问题被标记为C++时,为什么使用MALOC?您应该使用新的或更好的std::vector@return0我编辑我的答案,为什么Maloc可能是坏的C++,我建议你读它。非常感谢你的解释!
A = new C_A[length];
delete[] A;
int initializer[] = {5, 1, 3, 5, 5, 2, 9, 8};
int *A;
A = (int*) malloc(length*sizeof(int));
memcpy(A, initializer, length*sizeof(int));