让我们在我的main方法中说,我声明一个const int数组指针指向在堆上创建的数组。然后我想在构造函数TryInitialize()中初始化它的值(使用内存地址),然后将它们打印出来。这不起作用,我想知道我做错了什么?谢谢!
#include "stdafx.h"
#include "part_one.h"
#include <string>
#include <iostream>
using namespace std;
string createTable(unsigned int* acc, double* bal, int n) {
string s;
char buf[50];
for (int i = 0; i < n; i++) {
sprintf_s(buf,"%7u\t%10.2f\n",acc[i], bal[i]);
s += string(buf);
}
return s;
}
int _tmain(int argc, _TCHAR* argv[])
{
const int *tempInt = new const int[4];
TryInitialize(tempInt);
std::cout << tempInt[1] << endl;
system("pause");
return 0;
}
这是我的构造函数的代码:
#include "part_one.h"
TryInitialize::TryInitialize(void) {
}
TryInitialize::TryInitialize(int constInt[]) {
constInt[0] = 8;
constInt[1] = 0;
constInt[2] = 0;
constInt[3] = 8;
}
答案 0 :(得分:2)
您将指针声明为const int*
。 const
修饰符表示您无法更改数组值。
删除const
,或者为它创建一个初始化方法,它可以分配数组并返回它(与构造函数不同)。
const int* init_my_array()
{
int * ret = new int[4];
ret [0] = 8;
ret [1] = 0;
ret [2] = 0;
ret [3] = 8;
return ret;
}
...
const int *tempInt = init_my_array();
答案 1 :(得分:2)
您不应更改const
值。
对于你想要完成的事情,我建议声明一个非常量指针和一个常量指针,并在初始化后将非常量指针指定给const指针:
int _tmain(int argc, _TCHAR* argv[])
{
const int *tempTempInt = new int[4];
TryInitialize(tempInt);
const int* const tempInt = tempTempInt;
std::cout << tempInt[1] << endl; //this is now constant.
system("pause");
return 0;
}
还要注意将const放在指针声明中的位置:
const int* const tempInt = tempTempInt;
在上面的声明中,第二个const
表示您无法更改指针;第一个const
表示您无法更改指向的值。
答案 2 :(得分:0)
你没有。为什么?因为如果它是const,那么一旦构造了对象就无法改变它。注意:即使设置实际上更改其未初始化值的值,这与const开头的定义相反。