在C ++中使用方括号或星号声明双精度数组

Pay*_*ous 1 c++ arrays

具有这样声明的变量:

双*变量;

我认为这与写作完全一样

双变量[];

然后一些方法在起作用;

如何获得double数组的长度?我的意思是,我如何知道的最后一个初始化/访问/编写的元素位于哪个位置variable

jpo*_*o38 5

主要区别在于:

  • double* variable;是一个旨在在执行期间动态分配的指针(例如,通过newmalloc),或者可以指向一个双精度对象(然后,它不是“数组”)。
  • double variable[];是静态分配的数组(因此其大小在编译期间定义和固定)。请注意,这double variable[];作为声明无效。必须指定数组的大小(double variable[20];例如)。

要回答您的问题:您无法确定a double*double[]变量的元素数,除非您自己将其保存在某个地方。

例如,如果要将double *对象传递给函数,则需要同时传递指针和大小(元素数)。函数原型为( double* data, size_t size )

size_t mySize = 20;
double* data = new double[20];
callFunc( data, mySize );
delete [] data; // need to be deleted because dynamically allocated
Run Code Online (Sandbox Code Playgroud)

要么:

static const size_t mySize = 20;
double data[mySize];
callFunc( data, mySize );
// no need to be deleted because statically allocated
Run Code Online (Sandbox Code Playgroud)

正如其他用户所评论的,更喜欢一个std :: vector,它封装了double *指针及其元素数量(在其他属性中):

std::vector<double> data;
data.assign( 20, 0.0 );
callFunc( data );
Run Code Online (Sandbox Code Playgroud)

callfunc然后可以使用访问数据值并知道其大小data.size()

注:对于char *,惯例是最终通过一个特殊的字符(串\0),因此,在这种情况下,你可以决定size的的char通过找到这个特殊字符数组(这是strlen做)。您可以使用double *指针执行类似的操作(例如使用NaN来标识最后一项,然后恢复数组大小),但这只是一个小技巧,也不是常规做法,也不建议这样做。