这是使用写入指针的函数的正确方法吗?在调用函数之前,我是否必须为double*
分配内存?
double *myDouble;
write_to_pointer( myDouble );
答案 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 *)