这是初始化指针的正确方法吗?

时间:2014-06-10 07:02:09

标签: c++ pointers memory

这是使用写入指针的函数的正确方法吗?在调用函数之前,我是否必须为double*分配内存?

double *myDouble;
write_to_pointer( myDouble );

3 个答案:

答案 0 :(得分:4)

你的意思是它写入指针本身,还是指向它指向的内存?

如果它是第一个,它通过引用获取指针,例如:

void write_to_pointer(double *& p) {
    p = whatever;
}
然后这是正确的,虽然相当令人困惑。将值作为返回值返回会更好,这样分配就更明显了:

double *get_pointer() {return whatever;}
double *myDouble = get_pointer();

如果是第二个,则为no:指针不指向任何内容,因此尝试取消引用它将产生未定义的行为(通常会崩溃或破坏其他程序内存)。它需要指向有效的double(或足够大的double数组,如果这是函数所期望的那样。)

答案 1 :(得分:2)

您可以通过各种方式指向数据。

以下内容将在堆上创建一个double,并由myDub指向。然后,它会将myDub的值分配给4.然后它将删除myDub并将指针设置为NULL

double * myDub = new double;
*myDub = 4;
delete myDub;
myDub = NULL;

您可以类似地分配数组。

double * myDub = new double[123];
myDub[0] = 4;
myDub[3] = 43;
delete[] myDub;
myDub = NULL;

你可以指针指向已经存在的变量。 (请注意,在这种情况下我不会调用delete!)

double onStack = 4;
double * myDub = &onStack;

答案 2 :(得分:1)

这是写入指针的错误方法。将内存分配给变量:

double *myDouble =  new double;
write_to_pointer( &myDouble );
delete myDouble;
在这种情况下,

声明将是write_to_pointer(double **)

OR

在堆栈上声明你的变量:

double myDouble;
write_to_pointer( &myDouble );
在这种情况下,

声明将是write_to_pointer(double *)