C ++指针数组声明

时间:2013-04-17 07:04:16

标签: c++ arrays pointers

目前我有几个类,其数组定义为'float myIDs'。我想将变量移动到我的父类中并将其更改为指针('float * myIDs')。

目前我正在宣布其价值观如下:

float myIDs[] = {
    //Variables
};

由于它现在是指针,我认为它大致相同:

myIDs = new float[] = {
};

但这似乎不起作用。我不知道如何解决这个问题,因为我以前从未必须像这样声明一个指针数组。

有人可以帮我吗?

由于

6 个答案:

答案 0 :(得分:8)

请注意,你没有分配一个指针数组而只是一个float数组,所以基本上你们两个数组的类型相同,它们不会存储在同一个内存空间中。

只能以这种方式初始化静态分配的数组,动态分配的数组不能初始化为零以外的其他任何数据。

myIDs = new float[]();

但是如果您知道要放入数组的元素,则无需动态分配它。

如果你想分配一个指针数组,你必须这样做:

float* myIDs[size]; // statically
float** myIDs = new float*[size]; // dynamically

但只有静态分配的(第一个)可以按照你描述的方式初始化,当然,它必须用指针初始化。

答案 1 :(得分:3)

如果要以动态方式声明数组,可以这样做:

float *array = new float[size];
array[0] = first_value;
array[1] = second_value;
etc; 

请记住在不再需要它时释放内存(例如在类析构函数中)

delete [] array;

答案 2 :(得分:0)

如果你想要一个动态分配的数组,你应该使用以下格式(你做的似乎更像是C#而不是C ++)

//The declaration of the object in the class
float *myIDs;

//The allocation it self (you must know which size you want to allocate at this point)
myIDs = new float[size];//bring change "size" to whatever you need is.

答案 3 :(得分:0)

请考虑以下代码段

#include<iostream>
#include<stdlib.h>
int main(void)
{
int a[] = {1,2};

a =new int[2];
delete(a);

return 0;
}

这会产生错误error: incompatible types in assignment of ‘int*’ to ‘int [2]’。 我静态地创建一个int数组。 a是一个指针(它的类型为 int [2] ),但它不能用于指向其他动态分配的数组,因为它们返回类型为int*的指针。

如果要动态创建数组,则必须将其地址分配给float*

float * a = new float[10] ;

也请参阅this

答案 4 :(得分:0)

最简单的方法是:

float *myArray[size];

示例

#include <iostream>
using namespace std;

float* findMax (float* myArray[], int size) {
    float max = 0;
    int index = 0;
    for (int i = 0; i < size; i++) {
        if ( *myArray[i] > max) {
            max = *myArray[i];
            index = i;
        }
    }
    
    return myArray[index];
}

int main()
{
    float a = 1.25; 
    float b = 2.47; 
    float c = 3.92; 
    float d = 4.67; 
    float e = 5.89; 
    float f = 6.01;
    
    float *myArray[6];
    int len = *(&myArray + 1) - myArray;

    myArray[0] = &a;
    myArray[1] = &b;
    myArray[2] = &c;
    myArray[3] = &d;
    myArray[4] = &e;
    myArray[5] = &f;

    cout << "Number of even values are : " << findMax(myArray, len) << endl;

    return 0;
}

答案 5 :(得分:-4)

如果你想要一个指针数组浮动,你必须这样声明它。你只声明了一个浮点数组。数组的名称当然是指针,但在C sytnax中它被视为相同而且只是方便。

float *myIDs[] = {
  //Variables
};

myIDs = new *float[n] = {
};

或者你可以使用

float **myIDs;
myIDs = new **float;

以类似数组的方式访问它:

float * x = myIDs [i];