我想声明一个存储在指针A中的数组。我有以下代码。
int length = 8;
int *A;
A = (int*) malloc(length*sizeof(int));
A = {5, 1, 3, 5, 5, 2, 9, 8};
但是,无法像上面那样初始化数组。该错误表示"无法转换为' int'在任务"。我该如何解决这个问题?
此外,在声明数组(指针)时,c ++中是否需要malloc和memset?
谢谢!
答案 0 :(得分:2)
快速回答:
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指向的价值"您必须使用[]
或*
。
cplusplus.com has a good article on that topic
修改强>
我必须警告你,在C ++中使用malloc
不是一个好的实践,因为它不会初始化破坏复杂的对象。
如果你有:
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);
你会注意到cout永远不会发生,而正确的是:
A = new C_A[length];
delete[] A;
答案 1 :(得分:1)
NO。您不需要malloc
将数组声明为指针,因为数组本质上是一个指针。使用malloc
或不使用的区别在于,当使用malloc
时,数组在堆中而不是堆栈中声明。
其次,当且仅当您在声明例如
这是对的:int a[3]={1,2,3};
这是错误的:
int a[3];
a= {1,2,3};
答案 2 :(得分:0)
使用malloc()和memcpy()执行所需操作的合理有效方法是
int initializer[] = {5, 1, 3, 5, 5, 2, 9, 8};
int *A;
A = (int*) malloc(length*sizeof(int));
memcpy(A, initializer, length*sizeof(int));
答案 3 :(得分:-2)
使用new而不是malloc,它返回T *而不是void *,并支持异常:
int *A = new int[length];